我目前有一个目录结构,我需要能够遍历每个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/
这几乎是我所使用的每一个变体的回报。
答案 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 {} +