次のコマンドが/ varの下のtmpディレクトリを削除するのはなぜですか。これを防ぐ方法は何ですか?
find /var/tmp -type d -ctime -1 -exec rm -rf {} \;
pwd
/var/tmp
[root@linux /var/tmp]# find /var/tmp -type d -ctime -1 -exec rm -rf {} \;
find: /var/tmp: No such file or directory
答え1
見つかった最初のディレクトリfind /var/tmp
はです/var/tmp
。そのコマンドをスキップしてGnuを使用するには、find
コマンドを次のように変更できます。
find /var/tmp -depth -mindepth 1 -type d -ctime -1 -exec rm -rf {} \;
または
find /var/tmp -mindepth 1 -type d -ctime -1 -exec rm -rf {} \; -prune
いいえ-depth
、サブディレクトリの削除-prune
によってエラーメッセージが表示されることがあります。rm -rf
- 見たことがあるかもしれませんfind
。サブディレクトリが最初に呼び出されるように-depth
します。rm -r
しかし、サブツリーごとに一度だけ実行すればrm -rf
十分です-prune
。
答え2
論理NOT演算子を使用する!
か、-not
/var/tmpパスを結果から除外します。注:-not
POSIXと互換性がありません。
find /var/tmp -type d -ctime -1 ! -path /var/tmp -exec rm -rf {} \;
または
find /var/tmp -type d -ctime -1 -not -path /var/tmp -exec rm -rf {} \;