有没有办法告诉 bashfind
命令输出它正在做什么(详细模式)?
例如对于命令:
find /media/1Tb/videos -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;
输出:
Found /media/1Tb/videos/102, executing rm -rf /media/1Tb/videos/102
...
答案1
您可以用 来编造一些东西,但最简单的方法是在末尾-printf
添加。这将显示已成功删除的内容。-print
答案2
rm -vf
仅用于详细 rm 输出怎么样?
$ touch file1 file2 file3
$ find . -name "file?" -exec rm -vf {} \;
removed `./file2'
removed `./file3'
removed `./file1'
答案3
另一种方法是让命令通过以下方式执行sh -x
:
$ find . -type f -print0 | xargs -0 -n1 echo rm | sh -x
+ rm ./file1
+ rm ./file2
+ rm ./file3
答案4
@hlovdav 的回答对我来说已经足够了,但我做了一些修改以供自己使用
find . -name 'application*.yml' -print0 | xargs -0 -I %% bash -c 'rm -v "$1"' -- "%%"
解释
- 寻找
pattern
- 分开打印
null
,如果文件名中有空格或不寻常的字符,则这一点很重要 xargs
读取null
分开,将每个记录占位符设置为%%
这也确保每次只使用一个参数bash
命令,一行,内容可以包含任何内容,必须用单引号引起来'
--
这意味着我在此之后所做的任何事情都不是xargs
选项,bash
而是我的单行脚本的位置参数- 占位符通过引用作为单个参数给出,单引号或双引号无关紧要。如果使用双引号,也可以插入 shell 变量。
- 在
bash
脚本中,你可以访问%%
位置$1
参数 No #1
注意:你可以%%
用任何东西来改变,只要确保你不需要将它用作占位符以外的任何东西。使用美元$
或@
可能不太好,除非它是@
像 这样的双精度数@@
。