假设我要用下划线替换文件名中的所有空格。现在,我会这样做:
find . -type f -name "* *" -execdir bash -c 'mv "${1}" "${1// /_}"' -- {} \;
请注意,有点笨重的bash -c
构造可将find
的文件名匹配({}
)提升到我可以进行参数扩展的bash变量。
有没有一种方法可以直接在find
的{{1}}上应用bash参数扩展(如示例中所示),而无需通过显式的bash子shell(希望使语句短一些/更清晰)?
答案 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' {} +