加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 19:08:21 所属栏目:安全 来源:网络整理
导读:许多消息来源说,{}的每个实例都将被找到的文件名替换,但是当我尝试运行以下操作时,我只得到一个文本文件,其名称为“.txt” find /directory -name "*pattern*" -exec cut -f8 {} {}.txt ; 目标是创建一个文本文件,只有每个文件中的第八列,每个文本文
许多消息来源说,{}的每个实例都将被找到的文件名替换,但是当我尝试运行以下操作时,我只得到一个文本文件,其名称为“.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替换这两个字符,还是使用该字符串而不改变。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读