web-dev-qa-db-ja.com

フォルダから最も古いファイルを削除するBashスクリプト

フォルダーから古いファイルを削除するbashスクリプトを作成したいと思います。スクリプトを実行するたびに、古いファイルが1つだけ削除されます。これを手伝ってくれませんか?ありがとう

7
antiks

Kosが指摘したように、(作成日ごとに)最も古いファイルを知ることができない場合があります。

変更時間が適切で、ファイル名に改行がない場合:

rm "$(ls -t | tail -1)"
12
Archemar

作成された最も古いファイルではなく、変更された最も古いファイルを削除しても問題ないようです。

改行を含むファイル名で壊れないので、私はこれが最も安全な方法であると考えています。

stat --printf='%Y %n\0' * | sort -z | sed -zn '1s/[^ ]\{1,\} //p' | xargs -0 rm
  • stat --printf='%Y %n\0' *:NULで区切られた最終変更時刻のリストと、それに続く現在の作業ディレクトリ内の各ファイルのファイルパスを出力します。
  • sort -z:NULを行区切りとして使用してリストをソートします。
  • sed -zn '1s/[^ ]\{1,\} //p':最初のNUL終了行から、スペースの後にスペースが続かない1つまたは複数の文字を含む文字列の最初の出現を削除し、それを出力します。
  • xargs -0 rm:NULで終了する行を引数としてrmに渡します。
% touch file1
% touch file2
% stat -c '%Y %n' *            
1447318965 file1
1447318966 file2
% stat --printf='%Y %n\0' * | sort -z | sed -zn '1s/[^ ]\{1,\} //p' | xargs -0 rm 
% ls
file2
2
kos

「アクセス時間」または「時間の変更」に従って最も古いファイルを特定するには?

2番目の場合は、次のコマンドを使用します。

rm  ls -l --sort=time  | sed -n 2p  | awk '{print $NF}'
0
Zhengyuan Liu