2013-05-29 198 views
5

删除前导空格所以我有一个像一堆文件:bash脚本从文件名

Aaron Lewis - Country Boy.cdg 
Aaron Lewis - Country Boy.mp3 
Adele - Rolling In The Deep.cdg 
Adele - Rolling In The Deep.mp3 
Adele - Set Fire To The Rain.cdg 
Adele - Set Fire To The Rain.mp3 
Band Perry - Better Dig Two.cdg 
Band Perry - Better Dig Two.mp3 
Band Perry - Pioneer.cdg 
Band Perry - Pioneer.mp3 

和我需要在bash或鱼脚本删除前导空格。

+0

您的意思是您将文件重命名为前面没有空格,或者这些文件名是否存储在文本文件中,您需要处理它们? – lurker

+0

我想将文件重命名为前面没有空格。 – Acklavidian

回答

5

删除前导空格字符在您所提供的文件名,你可以使用:

IFS=$'\n' 
for f in $(find . -type f -name ' *') 
do 
    mv $f ${f/\.\/ /\.\/} 
done 

此:

  • 改变IFS只是换行符;这样它不会窒息文件名中的空格。
  • 查找当前目录中以空格开头的所有文件。
  • 使用bash子字符串替换将每个文件移动到没有前导空格的文件名。
+0

这样做!我总是忘记IFS。那就是杀死我自己的剧本。谢谢 – Acklavidian

0
for x in \ * ; do 
    mv "$x" `echo "$x" | sed "s/^ +//"` 
done 

这是快速和肮脏。

+0

不行。我得到这个'用法:mv [-f | -i | -n] [-v]源目标 mv [-f | -i | -n] [-v]源...目录' – Acklavidian

+0

有趣。我在一个bash shell中运行它,它为我工作。我只是再次确认:我将这些行完全复制并粘贴到我的shell终端,并将以空格开头的文件重命名为不以空格开头的文件。我正在运行Fedora 17 Linux。你运行的是什么Unix版本? – lurker

0

cat <file> | sed -e 's/^[ ]*//'

应该做的伎俩。捕获标准输出并写入文件。

+0

我正在寻找删除文件名中的前导空格。不是文件内容。不错,尽管。 – Acklavidian

0

您不需要sed。只需使用bash字符串函数:

for file in /path/to/files/*; 
    do mv "$file" "${file# *}"; 
done