我想获取目录中的所有文件,但不能获取该目录中的任何子目录。到目前为止我正在使用;
file=(path/to/my/files/*)
for f in ${files[@]}; do ...
答案 0 :(得分:2)
跳过循环中的子目录:
for file in path/to/my/files/*; do
[[ -d $file ]] && continue
# do other stuff here
done
效率并不高,但您可以构建一个这样的文件数组:
files=()
for file in path/to/my/files/*; do
[[ -d $file ]] || files+=( "$file" )
done
答案 1 :(得分:1)
使用GNU
find执行此操作的正确无错误方法类似于
#!/bin/bash
while IFS= read -r -d '' file; do
# Your script/command(s) goes here
done < <(find . -maxdepth 1 -mindepth 1 -type f -print0)
man find
说明-mindepth
和-maxdepth
字段
-maxdepth levels
Descend at most levels (a non-negative integer) levels of directories below the command line arguments. -maxdepth 0
means only apply the tests and actions to the command line arguments.
-mindepth levels
Do not apply any tests or actions at levels less than levels (a non-negative integer). -mindepth 1 means process all files except the command line arguments.
理想情况下,-mindepth 1
和-maxdepth 1
不会超出在多个级别搜索文件,即限制在当前目录中。 -print0
标志负责处理带有特殊字符的文件。
答案 2 :(得分:0)
在问题之前做好你的作业:)
如果您只想获取文件,那就简单了:
find <directory_name> -maxdepth 1 -type f
如果你想获取目录下的目录(只有1级:
find <directory_name> -maxdepth 1 -type d
你明白了
在bash脚本中(感谢@chepner的笔记):
#!/bin/bash
find . -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file; do
echo "$file"
done