使用find命令排除目录并在其他目录上执行脚本

时间:2016-05-11 16:06:00

标签: bash find

我目前有一个目录结构,我需要能够遍历每个100个左右的目录并在它们上单独运行一个脚本,同时排除对少数其他目录的检查。

这是我过去一直在使用的:

find ./OTHER/ -maxdepth 2 -wholename '*_*/*.txt' -execdir /files/bin/other_process {} +

我想从此检查中排除某些目录,但尚未找到足够的答案来解决此问题。

这是我在这个问题上最好的尝试(或两次):

find ./OTHER/ \( -path ./OTHER/X???_EXCLUDE_THIS -prune -o -path ./OTHER/X???_IGNORE_THIS -prune -o \) -type d \(-name *_*/*.txt \) -execdir /files/bin/other_process {} +

我明白了:

find: paths must precede expression  ./OTHER/A101_EXCLUDE_THIS/

这几乎是我所使用的每一个变体的回报。

1 个答案:

答案 0 :(得分:0)

  

这是我在这个问题上最好的尝试(或两次):

find ./OTHER/ \( -path ./OTHER/X???_EXCLUDE_THIS -prune -o -path ./OTHER/X???_IGNORE_THIS -prune -o \) -type d \(-name *_*/*.txt \) -execdir /files/bin/other_process {} +

此尝试中的错误:

  • \(-name\(后必须有空格。
  • -name *_*/*.txt-name是文件名的基础;在这里使用-path
  • *_*/*.txt:您应引用此类模式以防止shell扩展。
  • -o \)-o不属于表达式的末尾;你的意思是\) -o。但你不需要括号。
  • -type d:由于您要查找常规文件 *.txt,因此您不得寻找 d irectory。

纠正这些错误后,它会起作用:

find ./OTHER/ -path './OTHER/X???_EXCLUDE_THIS' -prune -o -path './OTHER/X???_IGNORE_THIS' -prune -o -path '*_*/*.txt' -execdir echo {} +