ディレクトリから最も古いファイルを削除する

ディレクトリから最も古いファイルを削除する

mvシステムコマンドを実行しようとしているダウンローダがPerlで実行されています。

MV出力

mv: cannot move `./PMC5318673/EXCLI-15-758.pdf' to `/directory/EXCLI-15-758.pdf': No space left on device

ドライブにスペースがありますが、フォルダはそのinodeをすべて使用したようです。

だから私たちが考えた解決策は、ディレクトリから最も古いファイルを削除し、そのファイルをそこに移動し、mvするスペースがまだない場合は、次に最も古いファイルを削除することでした。

迅速に実行されるシステムコマンドが必要です。 (何百万ものファイルがあるため、時間がかかりますか?)最も古いファイルは削除できます。また、これらのファイルはサブフォルダーにある場合があります。

また、最も古いファイルを削除する以外に他の方法が思い出されたら教えてください。

答え1

zshから:

rm -- **/*(.om[-1])

(または他のシェルからzsh -c 'rm -- **/*(.om[-1])':)

意味は次のとおりです

  1. **/* 再帰的にファイルを収集

  2. (…)はzsh グローバル修飾子

  3. .「一般」ファイル(ディレクトリなどを除く)のみが考慮されることを意味します。

  4. om変更時間別のソートを表します。

  5. -1最も古いファイルのみが選択されたことを示します。

~に帰属Gillesの答えからインスピレーションを得てください。

答え2

最も古いファイルの削除

find . -name '*some-pattern*' -type f -printf '%T+ %p\n' | sort | head -n1 | awk '{print $2}' | xargs rm -v

ここでの目的は、-name '*some_pattern*'削除するファイルにのみ一致を制限することです。

答え3

誰かがこの質問に答えてから削除しました。

find /path -mtime +1000 -exec rm -rf {} \;

これにより、1000日を過ぎたファイルが削除されます。

関連情報