【问题标题】:find command excluding subdirectory查找不包括子目录的命令
【发布时间】:2021-02-28 14:01:25
【问题描述】:

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

#!/bin/bash

for file in `find $path/* \( -name "*.txt" -o -name "*.out" \) -prune -maxdepth 1 -type f `;
do
    
    program "$file" -outdir=$outdir;
    
done

【问题讨论】:

  • find 的真正目的是遍历子目录。

标签: bash loops command


【解决方案1】:

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

#!/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 进行检查可能是个好主意。

【讨论】:

  • 非常感谢!我明明是太瞎了! :D 最简单的解决方案是最好的。
猜你喜欢
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 2015-02-09
  • 2013-06-11
  • 2020-04-28
  • 2013-02-05
  • 2011-12-31
  • 1970-01-01
相关资源
最近更新 更多