我试图将一些文件重命名为另一个扩展名:
# mv *.sqlite3_done *.sqlite3
Run Code Online (Sandbox Code Playgroud)
但得到一个错误:
mv: target '*.sqlite3' is not a directory
Run Code Online (Sandbox Code Playgroud)
为什么?
mv只能将多个文件移动到一个目录中; 它不能将每个人移动到不同的名称.你可以循环使用bash:
for x in *.sqlite3_done; do
mv "$x" "${x%_done}"
done
Run Code Online (Sandbox Code Playgroud)
${x%_done}_done从最后删除$x.
通配符扩展导致将多个名称传递给命令。shell 认为您正在尝试将多个文件移动到该*.sqlite3目录。
您需要使用循环:
for nam in *sqlite3_done
do
newname=${nam%_done}
mv $nam $newname
done
Run Code Online (Sandbox Code Playgroud)
该%_done说,除去最后一次出现_done在字符串。
如果文件名中可能有空格,则需要引用文件名。
小智 5
最简单的方法是使用 find
find . -type f -name '*.sqlite3_done' -exec sh -c 'x="{}"; mv "$x" "${x%_done}"' \;
Run Code Online (Sandbox Code Playgroud)