对于目录中的所有文件,我想用空格替换文件名中的下划线。
我尝试了这种解决方案,它与我想要的相反:https : //stackoverflow.com/questions/1806868/linux-replacing-spaces-in-the-file-names
但是用下划线切换了空格。那不起作用,给出错误
´x´ is not a directory
其中,x是文件名中的最后一个单词,例如 hello_world_x
用目录中所有文件的空格替换下划线的正确命令是什么?
cd到正确的目录后,此脚本将可靠地解决您的需求(由于${var//pat/str}
扩展,因此不可移植):
#!/bin/bash
set -- *_*
for file; do
mv -- "$file" "${file//_/ }"
done
*_*
全局*_*
文件将选择_
名称中带有的所有文件。
set --
这些名称(甚至包括空格或新行)将被可靠地设定为位置参数$1
,$2
等用的简单的命令set -- "list"
for file;
然后,每个位置参数将(依次)分配给var文件。
do ... done
包含要执行的命令(每个$file
)。
mv -- "$file" "${file//_/ }"
会将每个文件移动(重命名)为相同的名称,而每个(全部)都_
被替换为(空格)。
注意:您可以添加-i
(交互式)选项,以避免覆盖现有文件。如果文件存在,mv
将询问。需要注意的是:需要有一个mv
可以与用户进行交流的交互式外壳。
mv -i -- "$file" "${file//_/ }"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句