2013-05-08 133 views
11

我有一种情况,我需要每天在Xsan的文件夹中搜索超过400个文件,并用文件名中的低分代替空格。从文件夹中的文件名中删除空格

有没有人有脚本,我可以通过终端运行,例如,将为我做这个?

回答

30

在这里,你走了,这个循环遍历当前目录下的所有文件(和文件夹):

for oldname in * 
do 
    newname=`echo $oldname | sed -e 's/ /_/g'` 
    mv "$oldname" "$newname" 
done 

请注意,这将覆盖具有相同名称的文件。也就是说,如果有两个文件具有相同的文件名,但其中一个文件具有下划线,另一个文件具有空格。在那种情况下,具有下划线的那个将会被具有空格的那个覆盖。这个较长的版本会跳过这些情况:

for oldname in * 
do 
    newname=`echo $oldname | sed -e 's/ /_/g'` 
    if [ "$newname" = "$oldname" ] 
    then 
    continue 
    fi 
    if [ -e "$newname" ] 
    then 
    echo Skipping "$oldname", because "$newname" exists 
    else 
    mv "$oldname" "$newname" 
    fi 
done 
+0

mv命令中双引号的功能是什么?那条线相当于mv $(oldname)$(newname)吗? – 2016-08-11 04:16:26

+0

没有双引号,带空格的文件名会导致问题。不,不等同。 '$()'语法用于命令替换:https://en.wikipedia.org/wiki/Command_substitution – 2016-08-22 10:48:16

+1

ghhhaaaa我想要递归地做这件事,并且打所有的子类... – 2017-06-16 03:25:13