oni*_*arf 3 regex bash loops file
我正在编写一个bash脚本,需要在目录中循环与特定扩展名不匹配的文件.到目前为止,我发现以下代码循环所有匹配给定扩展名的文件:
for f in *.txt ; do
echo $f;
done
Run Code Online (Sandbox Code Playgroud)
insthead如何循环遍历与指定扩展名不匹配的文件?
您可以与==操作员进行模式匹配.
for f in *; do
[[ $f == *.txt ]] && continue
# [[ $f != *.txt ]] || continue
...
done
Run Code Online (Sandbox Code Playgroud)
如果这可能在一个空目录中运行,可以shopt -s nullglob在循环之前使用,也可以放在[ -e "$f" ] || continue循环中.(前者更可取,因为它可以避免不断检查文件是否存在.)
循环目录中与特定扩展名不匹配的文件
你可以使用extglob:
shopt -s extglob
for f in *.!(txt); do
echo "$f"
done
Run Code Online (Sandbox Code Playgroud)
pattern *.!(txt)将匹配带点的所有条目,并且不匹配txt点.
编辑:请参阅下面的评论.这是一个find循环遍历当前目录中与特定扩展名不匹配的文件的版本:
while IFS= read -d '' -r f; do
echo "$f"
done < <(find . -maxdepth 1 -type f -not -name '*.txt' -print0)
Run Code Online (Sandbox Code Playgroud)