shell – 在“find -exec”中多次使用当前文件名(“{}”)?

前端之家收集整理的这篇文章主要介绍了shell – 在“find -exec”中多次使用当前文件名(“{}”)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
许多消息来源说,{}的每个实例都将被找到的文件名替换,但是当我尝试运行以下操作时,我只得到一个文本文件,其名称为“.txt”
find /directory -name "*pattern*" -exec cut -f8 {} > {}.txt \;

目标是创建一个文本文件,只有每个文件中的第八列,每个文本文件将以其父文件命名。关于第二组{}的事情不会替换为每个找到的文件文件名。

尝试:
find /directory -name "*pattern*" -exec sh -c 'cut -f8 {} > {}.txt' \;

但请注意,某些版本的find需要{}作为一个不同的参数,否则不会将{}扩展为文件名。你可以解决这个问题:

find /directory -name "*pattern*" -exec sh -c 'cut -f8 $0 > $0.txt' {} \;

(此替代命令将输出文件放在包含匹配文件的子目录中。如果需要,可以通过重定向到$ {0#* /}

问题是找不到重定向,shell是。您的命令完全相当于:

# Sample of INCORRECT code
find /directory -name "*pattern*" -exec cut -f8 {} \; > {}.txt

请注意以下标准:

如果存在仅包含两个字符“{}”的多个参数,则该行为是未指定的。

如果一个utility_name或参数字符串包含两个字符“{}”,而不仅仅是两个字符“{}”,那么它是实现定义的,无论find替换这两个字符,还是使用该字符串而不改变。

猜你在找的Bash相关文章