我们要删除该文件下/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
-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
while-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