我们在日常的系统维护中,经常会遇到要批量读取指定目录下的文件名来进行操作,比如:循环读取所有文件的内容、批量修改文件名等等。
一旦大量的文件中,若其文件名中带有空格,则在我们读取文件名时就会遇到麻烦啦,譬如……
在Linux系统中,我们一般使用以下方法来遍历某个目录下的文件:
for file in $(ls *);
do
echo ${file}
done
但是,由于for语句是按照单词为单位(即空格)进行分割的,因此,当文件名称中有空格的时候,就会出现一个文件名被分成两个或者多个文件来读的情况,这就会影响正常的处理流程了,比如,某个目录下有下面4个文件:
a.txt
b.txt
c .txt
d e f.txt
上面的脚本执行的结果就变成
a.txt
b.txt
c
.txt
d
e
f
.txt
了。
那么遇到这种情况怎么办?其实我们我可以用while语句加上read命令来轻松实现。
ls * | while read fileName;
do
echo “${fileName}”
done
即先把每个文件的名称读取到变量fileName中,然后再输出到屏幕上,当然你也可以在这个while循环中完成你对每个文件的操作了。
结合上面的思路,来写个小示例(将当前目录下所有带空格的文件名中的空格去掉),代码实现如下:
ls * | while read tmp_file_name;
do
old_file_name=${tmp_file_name}
new_file_name=`echo ${old_file_name} | tr -d ‘ ‘` (字符串中去除空格,也可以用sed来实现)
mv “${old_file_name}” “${new_file_name}”
done