Linux – replace文件名中的空格
我有一个文件夹中的文件数量,我想用下划线replace所有文件名中的每个空格字符。 我怎样才能做到这一点?
这应该做到这一点:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
我更喜欢使用命令“rename”,它采用Perl风格的正则expression式:
rename "s/ /_/g" *
您可以使用-n标志执行干运行:
rename -n "s/ /_/g" *
使用sh …
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
如果你想在拉动触发器之前试试这个,只需将mv
改为echo mv
。
如果你想recursion地应用replace任务呢? 你会怎么做?
好吧,我自己find了答案。 没有最优雅的解决scheme(试图重命名也不符合条件的文件),但工程。 (顺便说一句,在我的情况下,我需要用'%20'重命名文件,而不是下划线)
#!/bin/bash find . -type d | while read N do ( cd "$N" if test "$?" = "0" then for file in *; do mv "$file" ${file// /%20}; done fi ) done
如果你使用bash:
for file in *; do mv "$file" ${file// /_}; done
引用你的variables:
for file in *; do echo mv "'$file'" "${file// /_}"; done
删除“回声”做实际的重命名。
尝试这样的事情,假设你的所有文件都是.txt的:
for files in *.txt; do mv “$files” `echo $files | tr ' ' '_'`; done
我相信你的答案是用下划线replace文件名中的空格 。
在Linux
中用另一个stringreplacestring(在你的情况下的空格字符)最简单的方法是使用sed
。 你可以这样做,如下所示
sed -i 's/\s/_/g' *
希望这可以帮助。
我试图运行这个脚本https://hastebin.com/xemitireri.bash ,
#!/bin/bash # https://stackoverflow.com/questions/1806868/linux-replacing-spaces-in-the-file-names find . -type d | while read N do ( cd "$N" if test "$?" = "0" then for file in *; do mv "$file" ${file// /_}; done fi ) done
我想recursion运行,在一个文件夹,其中有多个文件夹,其中每个文件夹中有多个文件。 文件夹名称和文件名称中都有空格(例如,在包含“磁盘1”,“磁盘2”等“Good Album”的文件夹“Testing”上运行。每个磁盘的文件夹都有“Song 1 .txt“,”Song 2.txt“,”Song 3.txt等),这个DID重命名文件夹,但不是文件夹里面的文件我收到错误bash:cd:./Disk 02:没有这样的文件或目录bash:cd:./Disk 01:没有这样的文件或目录bash:cd:./Disk 03:没有这样的文件或目录