os x terminal-x日より古いファイルを削除します


7

X日より古いファイルを削除するスクリプトを作成しようとしています。それは十分に簡単なように見えましたが、すべてのファイルが削除されているように見えますか?

find /Volumes/Groups/Projects/530_BFAMI/test/ -ctime +30 -print -exec rm {} \;

どんなアイデアも歓迎します!?

また、私の日付がファインダーで誤解を招く可能性があるため、一致するファイル情報を印刷することもできますか?


おghびします。仕事中。複数のパラメーターを使用できますか?すなわち、サイズを含める?-ctime +30 AND -size + 10000000c
v3nt

2
ほとんどの場合、使用すること(ファイルの内容が最後に変更された時間)と使用しないこと(ファイルのiノード関連情報が変更された時間)には大きな違いがctimeあります。この方法で使用されるのは非常にまれなので、OPに対する注意としてこれについて言及します。mtimemtimectimectime
イアンC.

回答:


13

決して提案しない-exec rm ...

rm単に危険すぎるコマンドです。常に最初に空運転します。私見はこれを使用する方が良いです:

find /Volumes/Groups/Projects/530_BFAMI/test/ -ctime +30 -print0 | xargs -0 -n1

これはドライランを表示し、満足した場合にのみrm最後に追加することができます

find /Volumes/Groups/Projects/530_BFAMI/test/ -ctime +30 -print0 | xargs -0 rm

このpiped to xargsバージョンの使用を開始する場合、次のようなフィルターをいつでも追加できます。

find /some/where -mtime +3d -print0 | grep -ziE '\.(jpg|png|gif)$' | xargs -0 rm

同様の(より)強力な組み合わせ。


この答えは受け入れられたはずです。ありがとう、ちょうどこれを探していました。
user14492

1
-ctime +30とは何ですか?30日前ですか?またはファイルの30分前。説明してください。
Naveedアッバス

@ToughGuy単位が指定されていない場合、ファイルステータス情報の最終変更時刻とfindが開始された時刻との差が次の完全な24時間に切り上げられてn 24時間である場合、このプライマリはtrueと評価されます。 。-別名:日
jm666

2

コメントで尋ねられた質問に答えるには、次のようにリストするだけで、別々の基準に参加できます。ご希望の場合は、使用することができます-aまたは-andそれらの間で、これらは冗長です。OR演算子-oまたは-orOR演算子を使用することもできます。括弧を使用することもできます。括弧は\(\)グループ化の場合と同様に、シェルから保護するために引用符で囲む必要があります。

詳細については、次を実行してください。 man find


0

最初のlsなしで-exec rmを使用することは危険と見なされます。最初に確認する必要があります。リバースチェックは、タイミングが正しいかどうかを確認するための良いヒントでもあります。

find . -maxdepth 1 -type f -mtime -30d -exec ls -latr {} \;

または

find . -maxdepth 1 -type f -atime -30d -exec ls -latr {} \;
  1. 検索結果を制約します。明示的に求めていることを確認してください。
  2. 比較して、反対の結果が元のコマンドから実際に除外されたものかどうかを確認します。
  3. -mtimeまたはおそらく-atimeより適切ですが、再度結果を比較して、実際に必要なものであるかどうかを確認します。

0

これを試して: find . -ctime +30 | xargs rm -r 2> /dev/null

何らかの理由で、これはrmを2回実行します。だから私はエラーをブラックホールにリダイレクトするだけです/dev/null

楽しい。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.