次のコマンドを使用して、1日より古いファイルまたはディレクトリを削除できます。
find /u01/Release/* -mtime +1 -exec rm -r {} \;
しかし、このコマンドの出力にエラーが発生するのはなぜですか?
ls -lrt
drwxr-xr-x 3 tomcat8 tomcat8 60 Oct 4 07:11 build_180
drwxrwxr-x 6 root root 309 Sep 21 2017 redis-3.2.11
-rw-r--r-- 1 root root 1550452 Oct 4 15:23 redis-3.2.11.tar.gz
find: ‘/u01/Release/redis-3.2.11’: No such file or directory
コマンドを実行した後
ls -lrt
drwxr-xr-x 3 tomcat8 tomcat8 60 Oct 4 07:11 build_180
-rw-r--r-- 1 root root 1550452 Oct 4 15:23 redis-3.2.11.tar.gz
答え1
これはよく知られた問題です。問題は、find
まずディレクトリを削除してからディレクトリ内のファイルを処理しようとすることです。回避策は、まずディレクトリの内容を処理してからディレクトリを削除することです。これが-depth
まさにオプションです。
find /u01/Release/* -depth -mtime +1 -exec rm -r {} \;
これで問題が解決します。より短い形式の演算-delete
(つまり-depth
、)を使用することに興味があるかもしれません。
find /u01/Release/* -mtime +1 -delete
いつものようにman find
あなたの友人。
答え2
--force
以下の方法を試してください。ファイルとディレクトリを削除するために使用するのが最善です。
find /u01/Release/* -mtime +1 -exec rm -rf {} \;
-r, -R, --recursive
remove directories and their contents recursively
-f, --force
ignore nonexistent files, never prompt