それぞれが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とDir3には、180日前よりも新しいファイルが少なくとも1つ含まれているため、変更されません。
新しいファイルを含むディレクトリを一覧表示してみましたが、すべての「その他」のディレクトリを削除する「逆」コマンドが見つかりませんでした。
GNUツールを使用:
for d in Dir*; do
find "$d" -mindepth 1 -mtime -180 -print -quit | grep -q . ||
echo rm -rf "$d"
done
満足したら、echo
を削除します。 -q
を削除して、ディレクトリが削除されない理由を確認します。
アプローチの1つは次のとおりです。
while read -r line; do rm -rf "${line%%/*}"; done < <(find . -type f -mtime +180 -printf "%P\n")
をread
にパイプし、それに応じてコマンドを実行します。