web-dev-qa-db-ja.com

1日より古いファイルまたはディレクトリの削除中にエラーが発生しました

以下のコマンドを使用して、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
2
RAJ METRE

これは非常によく知られている問題です。問題は、findが最初にディレクトリを削除してから、その中のファイルを処理しようとすることです。解決策は、最初にディレクトリ内のものを処理してから、ディレクトリを削除することです。それが-depthオプションの目的なので、次のようになります。

find /u01/Release/* -depth -mtime +1 -exec rm -r {} \;

トリックを行う必要があります。 -deleteアクション(-depthを意味します)を使用した短い形式にも興味があるかもしれません。

find /u01/Release/* -mtime +1 -delete

いつものようにman findはあなたの友達です。

2
jimmij

以下を試してください。ファイルとディレクトリを削除する--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
0
Stack EG