列出名称中包含空格的文件

时间:2015-03-01 04:20:46

标签: bash shell for-loop zsh

问题

在某些目录中,我的文件名中有一些带空格(或者某些特殊字符)的文件。

尝试每行列出一个文件,我使用ls -1但名称中包含空格的文件未按预期处理。

示例

我有这三个文件:

$ ls -1 
My file 1.zip
My file 2.zip
My file 3.zip

我希望列出并对它们做些什么,所以我使用这样的循环:

for i in `ls -1 My*.zip`; do
    # statements
    echo $i;
    # Do something with each file;
done

但是喜欢用空格分割名称:

My
file
1.zip
My
file
2.zip
My
file
3.zip

问题

我该如何解决这个问题?shell中是否有其他选择?

3 个答案:

答案 0 :(得分:3)

请勿使用ls的输出,请使用:

for f in *.zip; do
    echo "processing $f"
done

答案 1 :(得分:2)

不使用ls,并正确引用。

for i in My*.zip
do
  echo "$i"
done

答案 2 :(得分:0)

shopt -s dotglob
for i in *;
do :; # work on "$i"
done
shopt -u dotglob

默认情况下,以点开头的文件是特殊的,因为*与它们不匹配。

相关问题