使用Shell脚本读取目录内容

8

我将尝试使用Shell脚本获取一个目录的内容。

我的脚本如下:

for entry in `ls`; do
    echo $entry
done

然而,我的当前目录包含许多文件名中带有空格的文件。在这种情况下,此脚本将失败。

在shell脚本中循环遍历目录内容的正确方法是什么?

PS:我使用bash。


非常相关的问题: https://dev59.com/RnE95IYBdhLWcg3wJKh_ - jrharshath
2个回答

13
for entry in *
do
  echo "$entry"
done

也许你应该使用 'for entry in * .*'? - Jonathan Leffler
@Jonathan:如果您需要匹配以“.”开头的文件,则最好调整“dotglob”选项。 - Ignacio Vazquez-Abrams
什么是 dotglob 选项? - jrharshath
当通过 shopt -s dotglob 设置了 dotglob 时,* 将匹配以 . 开头的文件。 - Ignacio Vazquez-Abrams
您已经接受了此问题的答案。请创建一个新的问题。 - Ignacio Vazquez-Abrams

3
不要在for循环中使用ls来解析目录内容,否则会遇到空格问题。应该使用shell扩展代替。
   for file in *
    do
      if [ -f "$file" ];then
       echo "$file"
      fi
    done

那是Bash语法。试一下,记得在变量周围加上双引号。这将保留空格。只是不要在“for循环”中使用ls - ghostdog74

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接