Shell-Script

find中的rm和’-delete’有什麼區別?

  • December 17, 2018

我們要刪除/tmp超過 100 分鐘的文件。

有什麼區別:

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

和:

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

第二- 是否可以在命令中添加一些print / echo以便列印它刪除的每個文件?

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

當文件被刪除時,我想到了兩種列印文件的方法:

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

或者

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

前者指示 GNUfind在刪除之前列印文件名(全路徑);後者告訴在每個文件名find上執行,其中指示(GNU)詳細說明它在做什麼。rm -v``-v``rm

前者的輸出如下:

/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的另一項需要注意的-delete是,它會在直接取消連結文件的同時-exec rm搜尋您的 $PATH 。通常不是問題,但需要注意。rm``-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

引用自:https://unix.stackexchange.com/questions/489531