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

在删除文件时,我想到了两种打印文件的替代方案:

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-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中另一个需要注意的事项-delete是,它将-exec rm在 $PATH 中搜索rmwhile-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

使用 时-deletefind默认情况下也会以深度优先的方式遍历搜索路径。这允许它删除以后不会尝试进入的目录。如果您在目录上使用,则必须使用findwith ,否则您会抱怨找不到它认为存在的目录。-depth-exec rm -rf {}find

相关内容