我正在编写一个
shell脚本,我需要在其中循环遍历目录,然后循环遍历其中的文件.所以我写了这个函数:
@H_502_1@loopdirfiles() {
#loop over dirs
for dir in "${PATH}"/*
do
for file in "${dir}"/*
do
echo $file
done
done
}
问题是它在空目录上回复了类似* path / to / dir / **的内容.
有没有办法使用这种方法并忽略这些目录?
您可以从目录名称中删除*而不是完全忽略它:
@H_502_1@[[ $file == *"*" ]] && file="${file/%\*/}"
#this goes inside the second loop
原文链接:https://www.f2er.com/bash/383541.html或者,如果要忽略空目录:
@H_502_1@[[ -d $dir && $ls -A $dir) ]] || continue #this goes inside the first loop其他方式:
@H_502_1@files=$(shopt -s nullglob dotglob; echo "$dir"/*) (( ${#files} )) || continue #this goes inside the first loop或者你可以打开nullglob(Etan Reisner提到)和dotglob:
@H_502_1@shopt -s nullglob dotglob #This goes before first loop.nullglob
If set,Bash allows filename patterns which match no files to expand
to a null string,rather than themselves.dotglob
If set,Bash includes filenames beginning with a ‘.’ in the results of
filename expansion.