GNU/Linux >> Linux の 問題 >  >> Linux

サブディレクトリを含む x 日より古いファイルを削除する Bash スクリプト

type 結果をフィルタリングするオプション

find type を受け入れます たとえば、ファイルのみを選択するためのオプション。

find /path/to/files -type f -mtime +10 -delete

-delete を省略 削除するものを表示し、それを確認したら、先に進んで完全なコマンドを実行してください。

これは、ディレクトリではなくファイルでのみ実行されます。 -type d を使用 逆に、引数に一致するディレクトリのみを一覧表示します。

追加オプション

man find を読みたいと思うかもしれません 、将来必要になる可能性のあるオプションがいくつかあります。例:-maxdepth 見つかったアイテムを特定の深さだけに制限することができます。 -maxdepth 0 サブディレクトリに再帰しません。

コメント

  • rm でフォルダーを削除できないため、コマンドがどのようにフォルダーを削除したのだろうか それだけ。 rm -r が必要です

  • また、/path/to/files* 紛らわしいです。 /path/to/files/のことですか または、ワイルドカードが複数のファイルおよびフォルダー名に展開されることを期待していますか?

  • {} を入れる 一重引用符で囲みます。例:'{}' バックスラッシュでセミコロンを保護するのと同じように、置き換えられたファイル/ディレクトリ名がシェルによって解釈されないようにします。


以前の回答と同様に(両方とも+1)、トリックは -type f を使用することです 述語。

-exec rm '{}' の代わりに -delete も使用できます 述語。しかし、そうしないでください。 -exec rm '{}' で 最初に -exec echo rm '{}' を行うことができます (またそうすべきです) これが本当にあなたが望むものであることを確認します。その後、echo なしでコマンドを再実行します .

-delete の使用 より高速です (余分な fork() はありません) と execve() -delete であるため、これは危険です。 条件としても機能するため、

# delete *.tmp files
find . -type f -name '*.tmp' -delete

ただし、引数のみを交換する場合:

# delete ALL files
find . -type f -name '*.tmp' -delete

find が必要な場合 と rm 大量のファイルをより高速に処理するには、find ... | xargs ... rm をチェックしてください UNIX のイディオム。


Linux
  1. LinuxでX日より古いすべてのファイルを削除するにはどうすればよいですか?

  2. Find -mtime +1が2日より古いファイルのみを返すのはなぜですか?

  3. 検索で特定のサブディレクトリを除くすべてのファイルを削除しますか?

  1. Linux で tmpreaper を使用して N 日以上経過したファイルを削除する方法

  2. find コマンドを使用せずに n 日より古いファイルを削除する方法

  3. Linux で特定の期間より古いファイルを見つけて削除する方法

  1. x日より古いファイルまたはフォルダーを見つけて削除する

  2. Linuxで特定の日付より古いファイルを削除するにはどうすればよいですか?

  3. X よりも古いすべてのファイルを含むディレクトリを検索しますか?