从查找结果中排除多个目录

时间:2019-07-03 18:22:05

标签: bash find

我需要从查找结果中排除多个目录。我知道如何通过在@material-ui命令中进行硬编码来做到这一点,但是能否将排除的dir的列表存储为变量或数组,然后在find命令中使用?

这是我的工作命令:在此命令中,我是findtouching,{ {1}}和dumped目录。

maxdepth 1

如果您注意到我在.命令中提供了硬编码,以排除目录。

是否有任何方法可以将列表存储在变量中并传递给./tmp命令?

类似./garbage并在以后使用吗?

我尝试了以下操作,但没有成功:

find . -maxdepth 1 ! -path "." ! -path "./tmp" ! -path "./garbage" -type d -exec touch {}/dumped  2>/dev/null \;

1 个答案:

答案 0 :(得分:2)

未经测试:使用数组

find_clauses=(
      -maxdepth 1 
    ! -path "." 
    ! -path "./tmp" 
    ! -path "./garbage" 
      -type d 
      -exec touch {}/dumped ';'
)
find . "${find_clauses[@]}" 2>/dev/null

如果要将排除的目录放在列表中,仍然可以动态构建find子句:

exclude_dirs=( . ./tmp ./garbage )

find_clauses=( -maxdepth 1 )
for d in "${exclude_dirs[@]}"; do find_clauses+=( ! -path "$d" ); done
find_clauses+=( 
      -type d 
      -exec touch {}/dumped ';'
)

find . "${find_clauses[@]}" 2>/dev/null