web-dev-qa-db-ja.com

古いファイルのみを含むLinuxディレクトリを削除します

それぞれが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つ含まれているため、変更されません。

新しいファイルを含むディレクトリを一覧表示してみましたが、すべての「その他」のディレクトリを削除する「逆」コマンドが見つかりませんでした。

5
pk7

GNUツールを使用:

for d in Dir*; do
  find "$d" -mindepth 1 -mtime -180 -print -quit | grep -q . ||
    echo rm -rf "$d"
done

満足したら、echoを削除します。 -qを削除して、ディレクトリが削除されない理由を確認します。

6

アプローチの1つは次のとおりです。

while read -r line; do rm -rf "${line%%/*}"; done < <(find . -type f -mtime +180 -printf "%P\n")

readにパイプし、それに応じてコマンドを実行します。

1