查找不包含子目录的命令



对不起,但其他问题没有帮助我:/我想循环遍历一个目录,以便在某些文件上应用程序。问题是它还包含子目录。我的代码有什么问题?:

#!/bin/bash
for file in `find $path/* ( -name "*.txt" -o -name "*.out" ) -prune -maxdepth 1 -type f `;
do

program "$file" -outdir=$outdir;

done

不要在for循环中使用find的输出作为列表。当文件名包含空白字符时,它将不起作用,并且无论如何,为该任务调用外部命令是多余的。使用globs代替:

#!/bin/bash
shopt -s nullglob
for file in "$path"/*.txt "$path"/*.out; do
program "$file" -outdir="$outdir"
done

指出:

  • 当启用nullglob选项时,当没有找到匹配该模式的文件时,该模式将从列表中删除。否则模式将保持不变。
  • "$path"/*.txt "$path"/*.out可还原为"$path"/{*.txt,*.out}
  • 上面的模式将不匹配以点(.)开头的文件名,但如果需要,可以补救这个问题。
  • 匹配模式的文件不一定是常规文件。在for循环体的顶部通过[[ -f "$file" ]] || continue检查这一点可能是个好主意。

最新更新