如何在bash中使用通配符重命名文件?

时间:2017-08-16 01:32:17

标签: bash

我试图将某些文件重命名为另一个扩展名:

# mv  *.sqlite3_done *.sqlite3

但收到了错误:

mv: target '*.sqlite3' is not a directory

为什么?

3 个答案:

答案 0 :(得分:6)

mv只能将多个文件移动到一个目录中;它不能将每个人移动到不同的名称。你可以用bash循环:

for x in *.sqlite3_done; do
    mv "$x" "${x%_done}"
done

${x%_done}_done的末尾删除$x

答案 1 :(得分:2)

通配符扩展会导致多个名称传递给命令。 shell认为您正在尝试将多个文件移动到'1目录。

您需要使用循环:

*.sqlite3

for nam in *sqlite3_done do newname=${nam%_done} mv $nam $newname done 表示从字符串中删除最后一次出现的%_done

如果您的文件名中可能包含空格,则需要引用文件名。

答案 2 :(得分:0)

简单的方法是使用find

find . -type f -name '*.sqlite3_done' -exec sh -c 'x="{}"; mv "$x" "${x%_done}"' \;