以下のコマンドを使用して、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
これは非常によく知られている問題です。問題は、find
が最初にディレクトリを削除してから、その中のファイルを処理しようとすることです。解決策は、最初にディレクトリ内のものを処理してから、ディレクトリを削除することです。それが-depth
オプションの目的なので、次のようになります。
find /u01/Release/* -depth -mtime +1 -exec rm -r {} \;
トリックを行う必要があります。 -delete
アクション(-depth
を意味します)を使用した短い形式にも興味があるかもしれません。
find /u01/Release/* -mtime +1 -delete
いつものようにman find
はあなたの友達です。
以下を試してください。ファイルとディレクトリを削除する--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