bash:只遍历文件,而不是子目录?

时间:2015-08-14 21:19:04

标签: bash

是否有一个简单的选项可以在bash for循环结构中完成迭代文件而不是子目录:

 for file in /some-dir/*

?如果没有,这怎么做得最好?

1 个答案:

答案 0 :(得分:3)

一种方法是循环并在目录上放置显式的继续:

for file in /some-dir/*; do
  [[ -d $file ]] && continue
done

另一种方法是使用extglob语法(此示例经测试可用于bash 4.x):

shopt -s extglob
for file in some-dir/!(*/); do
  echo "Found $file"
done

另一种方法是使用find - 请参阅下面的示例,了解如何仔细执行此操作:

# Using file descriptor 3 so stdin is unmodified
# ...choose another FD number if you like.
while IFS= read -r -d '' -u 3 filename; do
  : "$filename"
done 3< <(find . -maxdepth 1 -type f -print0)