我多次遇到这个问题,我很想知道是否有任何命令行机制我不知道可以解决它。
让我们考虑一下我有一组文件,我想重命名,用另一个文件更改名称中的前缀。
重命名:
foo_a.png
foo_b.png
foo_c.png
要:
bar_a.png
bar_b.png
bar_c.png
在一个命令行中,而不是在脚本中。
以下是我所知道的接近此问题的一些解释。
我知道如何方便地迭代这些文件,例如将它们转换为另一种格式。
find . -name "foo*png" |xargs -I G mv G bar_G
这实际上是作弊,因为它将旧文件名重新用作新文件名的一部分。
请详细说明答案中使用的命令。
答案 0 :(得分:1)
@ jm666评论说你可以使用重命名,但不能打败它 如果您想手动执行此操作并在iy中支持带换行符的文件名,则手动编写将导致
find . -name foo\*png -print0 2>/dev/null |
xargs -0 -I G bash -c 'newfile=$(sed 's/foo/bar/' <<< "G") ; mv "G" "${newfile}"'
我想你会选择
rename foo bar foo*png
编辑:带有find的行未格式化为代码。
和
解释find print0
+ xargs -0
(或xargs -null
):
文件名可以包含空格和换行符。如果要使用换行符处理文件名,则无法逐行解析查找输出
例如:
touch "an
> example"
find . -name an\* | xargs -I G echo "==G=="
==./an==
==example==
find . -name an\* -print0 | xargs -0 -I G echo "==G=="
==./an
example==