私たちには多くのディレクトリがあり、各ディレクトリには2つのファイルが含まれています。そのうちの1つは隠しファイルです。変更日が180日より古いファイルのみを含むすべてのディレクトリとその内容を削除しようとしています。たとえば、次のような場合があります。
Dir1 Jan 1 2000
File1A Jan 1 2000
File1B Jan 1 2000
Dir2 Jan 1 2000
File2A Jan 1 2014
File2B Jan 1 2014
Dir3 Jan 1 2000
File3A Jan 1 2014
File3B Jan 1 2000
Dir1とそのコンテンツ(隠しファイルを含む)のみを削除するには、Linuxコマンドが必要です。 Dir2とDir 3は、各ファイルに180日前のファイルが1つ以上含まれているため、変更されていません。
最新のファイルを含むディレクトリを一覧表示しましたが、「その他」ディレクトリをすべて削除する「逆方向」コマンドが見つかりませんでした。
答え1
GNUツールの使用:
for d in Dir*; do
find "$d" -mindepth 1 -mtime -180 -print -quit | grep -q . ||
echo rm -rf "$d"
done
満足のいくものを削除してくださいecho
。-q
ディレクトリが削除されなかった理由を確認するには、削除してください。
答え2
方法の1つは次のとおりです。
while read -r line; do rm -rf "${line%%/*}"; done < <(find . -type f -mtime +180 -printf "%P\n")
入力をパイプread
し、それに応じてコマンドを実行します。