Bash find 命令详细输出

Bash find 命令详细输出

有没有办法告诉 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"' -- "%%"

解释

  1. 寻找
  2. pattern
  3. 分开打印null,如果文件名中有空格或不寻常的字符,则这一点很重要
  4. xargs读取null分开,将每个记录占位符设置为%% 这也确保每次只使用一个参数
  5. bash命令,一行,内容可以包含任何内容,必须用单引号引起来'
  6. --这意味着我在此之后所做的任何事情都不是xargs选项,bash而是我的单行脚本的位置参数
  7. 占位符通过引用作为单个参数给出,单引号或双引号无关紧要。如果使用双引号,也可以插入 shell 变量。
  8. bash脚本中,你可以访问%%位置$1参数 No #1

注意:你可以%%用任何东西来改变,只要确保你不需要将它用作占位符以外的任何东西。使用美元$@可能不太好,除非它是@像 这样的双精度数@@

相关内容