shell下批量出去文件名中的空格

由于shell下默认分割符为空格,所以我们在执行一些文件名中还有空格的循环时,将会出现一些问题,

我们来看一个目录的文件

[Rubbish]$tree
.
├── abc
└── bc de

0 directories, 2 files

这是一个有2个文件abc 和bc de组成的文件,如果我们要执行一个for循环

for loop in `ls`
do  
echo $loop
done


结果大家应该都知道,输出

abc
bc
de

如果我们想批量除去文件名中的空格,我们应该怎么做呢,下面我们看一下下面一段脚本

for loop in `ls -1 | tr ' '  '#'`
 do  
    mv  "`echo $loop | sed 's/#/ /g' `"  "`echo $loop |sed 's/#//g' `"  2> /dev/null 
done

我们首先利用ls -1(不是字母l,是数字1),将单个文件放在一行,然后利用替换,就文件名中的空格替换为#(具体自己看情况),下面就是利用一些替换将文件名给替换回来,不过需要记住,含有空格的文件名需要使用引号括起来,最终就可以替换当前目录下的所有文件名中的空格,代码中的2> /dev/null只是为了将不含空格的文件替换中产生的源文件已存在的信息隐藏。 


下面网友说的很对,使用rename一步搞定。

rename 's/ /_/g' *

上述命令可以将当前文件夹内所有文件的名字中得所有空格替换为_。其中g代表所有,如果不加g,如果文件名字中有多个空格,仅替换第一个。


更多文章请前往小胖轩.




你可能感兴趣的:(shell下批量出去文件名中的空格)