Shell-Script
find中的rm和’-delete’有什麼區別?
我們要刪除
/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 {} \;
前者指示 GNU
find
在刪除之前列印文件名(全路徑);後者告訴在每個文件名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
也會以深度優先的方式遍歷搜尋路徑。這允許它刪除以後不會嘗試進入的目錄。如果您在目錄上使用,則必須使用find
with ,否則您會抱怨找不到它認為存在的目錄。-depth``-exec rm -rf {}``find