回答:
@Josが指摘したように、あなたは間にスペースを逃したname
と'*.gz'
。また、コマンドの使用高速化のため-type f
にコマンドを実行するオプションがFのみイレス。
したがって、固定コマンドは次のようになります。
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;
find
:見つけるためのUNIXコマンドFジル/ D irectories / Lのインク等/path/to/
:検索を開始するディレクトリ。-type f
:ファイルのみを検索します。-name '*.gz'
:で終わるファイルをリストします.gz
。-mtime +7
:変更日が7日より古いもののみを考慮してください。-execdir ... \;
:見つかったそのような結果ごとに、で次のコマンドを実行し...
ます。rm -- '{}'
:ファイルを削除します。この{}
部分は、検索結果が前の部分から置き換えられる場所です。--
コマンドパラメータの終わりは、ハイフンで始まるこれらのファイルのプロンプトエラーを回避することを意味します。find /path/to/ -type f -mtime +7 -name '*.gz' -print0 | xargs -r0 rm --
男を見つけるから:
-print0
True; print the full file name on the standard output, followed by a null character
(instead of the newline character that -print uses). This allows file names that contain
newlines or other types of white space to be correctly interpreted by programs that process
the find output. This option corresponds to the -0 option of xargs.
次のことになるため、これはもう少し効率的です。
rm file1 file2 file3 ...
とは対照的に:
rm file1; rm file2; rm file3; ...
以下のような-exec
方法。
別の高速なコマンドは、次の代わりにexecの+
ターミネーターを使用することです\;
。
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' +
このコマンドはrm
、ファイルが検出されるたびにではなく、最後に1回だけ実行されます。このコマンドは-delete
、modernで次のようにオプションを使用するのとほぼ同じ速度ですfind
。
find /path/to/ -type f -mtime +7 -name '*.gz' -delete
-delete
最後にまっすぐに行かないのはなぜですか?+
またはを台無しにするのはなぜ\;
ですか?
findでファイルを慎重に削除してください。-lsを指定してコマンドを実行し、削除するものを確認します
find /media/bkfolder/ -mtime +7 -name '*.gz' -ls
。次に、履歴からコマンドを取り出して追加します-exec rm {} \;
findコマンドが実行できる損害を制限します。1つのディレクトリからのみファイルを削除する場合、-maxdepth 1
サブディレクトリを検索したり、タイプミスし/media/bkfolder /
た場合にシステム全体を検索したりすることを防ぎます。
私が追加する他の制限は、のようなより具体的な名前引数です。-name 'wncw*.gz'
時間より新しい時間を追加 -mtime -31
し、検索されたディレクトリを引用します。これらは、クリーンアップを自動化する場合に特に重要です。
find "/media/bkfolder/" -maxdepth 1 -type f -mtime +7 -mtime -31 -name 'wncw*.gz' -ls -exec rm {} \;
name
との間にスペースが必要'*.gz'
です。