findでrmと「-delete」の違いは何ですか? [コピー]

findでrmと「-delete」の違いは何ですか? [コピー]

/tmpこのファイルの下から100分より古いファイルを削除しようとしています。

違いは何ですか:

find /tmp -type f -mmin +100 -exec rm {} \;

そして:

find /tmp -type f -mmin +100 -exec -delete 

第二- いくつか追加できますか?印刷/エコー削除するすべてのファイルを印刷するコマンドから?

/tmp/hadoop-unjar7118762490947462979/META-INF/NOTICE was deleted !!!

答え1

ファイルの削除中にファイルを印刷する2つの選択肢を考えました。

find /tmp -type f -mmin +100 -printf '%p was deleted!!\n' -delete

または

find /tmp -type f -mmin +100 -exec rm -v {} \;

前者は、findファイルを削除する前にファイル名(フルパス)を印刷するようにGNUに指示し、後者はfind各ファイル名に対して実行するように指示します。rm -v-vrm

前者の出力は次のとおりです。

/tmp/.sh_history.6668 was deleted!!
/tmp/krb5cc_6094 was deleted!!
/tmp/.sh_history.18394 was deleted!!

そして後者の出力は次のとおりです。

removed ‘/tmp/.sh_history.6668’
removed ‘/tmp/krb5cc_6094’
removed ‘/tmp/.sh_history.18394’

-exec rm {}vsで注目すべきもう一つのことは、$ PATHを検索する-deleteことです。-exec rmrm-delete リンクを直接キャンセルしてください。文書。一般的に問題ではありませんが、注意すべき点があります。

例:

$ pwd
/tmp/jeff
$ ls
bar  foo  rm
$ cat rm
#!/bin/sh
echo Hi, I am the fake rm: "$@"
$ PATH=/tmp/jeff:$PATH
$ find . -type f -exec rm {} \;
Hi, I am the fake rm: ./rm
Hi, I am the fake rm: ./bar
Hi, I am the fake rm: ./foo

-deleteを使用すると、デフォルトfindでは深さ優先の方法で検索パスもナビゲートされます。これにより、後で入力しないディレクトリを削除できます。ディレクトリで使用する場合はfindwithを使用する必要があります。そうしないと、存在すると思うディレクトリが見つからないと文句を言います。-depth-exec rm -rf {}find

関連情報