>

Bash循环处理带有空格的文件名

- 编辑:广西快乐十分 -

Bash循环处理带有空格的文件名

Shell中处理带有空格的文件名的小trick

作者:crane-yuan 日期:2017-05-02

 


晚上终于把论坛上那个16本Python书的帖子里的书下载完了,发现有好几本书名前都有一个 [搬书匠#123] 这样格式的前缀,而且有几个文档还莫名其妙的有运行权限,于是我决定写个脚本清理一下,其实是套用一下之前的一个脚本(把1.abc.mp3改成01.mp3以自动排序):

解决方法

使用IFS(the Internal Field Separator),Shell依靠它去决定如何进行单词分隔。

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "nb")

for f in *
do
  echo "$f"
done

IFS=$SAVEIFS

 

建议

在Linux或Unix系统中,命名文件时,最好不要带有空格,这会给自在带来麻烦的。

#!/bin/sh

参考文章

  • BASH Shell: For Loop File Names With Spaces
  • SHELL技巧:处理文件名中的那些空格
  • Work the Shell - Dealing with Spaces in Filenames

# Description:

#    if there is a file with name: [1-9].xxx, it will be changed into 0[1-9].xxx

 

for var in `ls`;

do

    new=`echo $var | sed "s/^([1-9])./01./g"`

    if [ $var != $new ];then

        mv $var $new

    fi

done

 

之前这个脚本运行很正常,我打算直接把 sed 后面的正则表达式改一改就搞定,结果改了之后刷出来一堆错误信息,说 Can't stat file "xxx", 而 xxx 文件只是正确文件名中的一段,我如梦初醒,原来是文件名中有空格,ls 返回的 list 被 for 错误地逐词识别了,这下囧了,源文件空格满满的啊,难怪 Unix Haters' Handbook 把文件名中有空格的问题批得一无是处。

 

本文由娱乐发布,转载请注明来源:Bash循环处理带有空格的文件名