使用命令行(在 Fedora 中),我想将当前目录中扩展名为“foo”的所有文件重命名为相同的名称,但扩展名为 foo1。
我尝试过在 StackExchange 上找到的几个示例:
rename foo foo1 *.foo
和
find . -name '*.foo' -execdir rename 's/\.foo$/.foo1/' \{} \;
两者都会多次生成以下错误:
rename: not enough arguments
任何想法表示赞赏。
答案1
您的使用rename
可能并不在所有地方都有效。实现此目的的另一种方法是使用find
、mv
和一些 bash 替换。
find . -name '*.foo' -exec bash -c 'mv "$0" "${0%.foo}.foo1"' "{}" \;
有几点需要注意:
我用了-exec
又没用-execdir
。后者有效地cd
指向匹配文件的目录(这不是您想要的,因为文件的路径(相对于.
)将不再正确)。您想要的只是-exec
为每个匹配的文件运行给定的命令-name '*.foo'
(替换{}
为匹配文件的路径)。
"${0%.foo}"
删除扩展名.foo
,因此 if $0
is "hello.foo"
then"${0%.foo}"
最终为"hello"
.然后添加.foo1
到末尾只是附加该内容,也是"${0%.foo}.foo1"
如此"hello.foo1"
。
答案2
使用for
循环
for f in *.foo
do
mv $f ${f/.foo/.foo1}
done
答案3
将 a 添加1
到名称最初以 结尾的所有文件的名称中.foo
:
find . -type f -name '*.foo' -exec mv -i {} {}1 ';'