在find的{}上应用bash参数扩展?

时间:2018-08-28 08:10:34

标签: bash find

假设我要用下划线替换文件名中的所有空格。现在,我会这样做:

find . -type f -name "* *" -execdir bash -c 'mv "${1}" "${1// /_}"' -- {} \;

请注意,有点笨重的bash -c构造可将find的文件名匹配({})提升到我可以进行参数扩展的bash变量。

有没有一种方法可以直接在find的{​​{1}}上应用bash参数扩展(如示例中所示),而无需通过显式的bash子shell(希望使语句短一些/更清晰)?

1 个答案:

答案 0 :(得分:0)

据我所知; find总是按字面扩展{}。但是,如果您使用rename,则可以缩短代码。

但是请注意,周围有两个称为rename的通用程序。第一个(用C编写,是util-linux的一部分)将像这样使用:

find . -type f -name '* *' -execdir rename ' ' '_' {} +

请注意,util-linux rename仅替换搜索字符串的 first 出现,而不是全部替换。

第二个rename(用Perl编写,有时安装为prename)将像这样使用:

find . -type f -name '* *' -execdir rename 's/ /_/g' {} +