是否有一个简单的选项可以在bash for循环结构中完成迭代文件而不是子目录:
for file in /some-dir/*
?如果没有,这怎么做得最好?
答案 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)