尝试更改多个文件的扩展名

尝试更改多个文件的扩展名

使用命令行(在 Fedora 中),我想将当前目录中扩展名为“foo”的所有文件重命名为相同的名称,但扩展名为 foo1。

我尝试过在 StackExchange 上找到的几个示例:

rename foo foo1 *.foo

find . -name '*.foo' -execdir rename 's/\.foo$/.foo1/' \{} \;

两者都会多次生成以下错误:

rename: not enough arguments

任何想法表示赞赏。

答案1

您的使用rename可能并不在所有地方都有效。实现此目的的另一种方法是使用findmv和一些 bash 替换。

find . -name '*.foo' -exec bash -c 'mv "$0" "${0%.foo}.foo1"' "{}" \;

有几点需要注意:

我用了-exec又没用-execdir。后者有效地cd指向匹配文件的目录(这不是您想要的,因为文件的路径(相对于.)将不再正确)。您想要的只是-exec为每个匹配的文件运行给定的命令-name '*.foo'(替换{}为匹配文件的路径)。

"${0%.foo}"删除扩展名.foo,因此 if $0is "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 ';'

相关内容