исключить несколько каталогов из результата поиска - PullRequest
0 голосов
/ 03 июля 2019

Мне нужно исключить несколько каталогов из результата поиска. Я знаю, как сделать это путем жесткого кодирования в команде find, но можно ли сохранить список исключенных dir в виде переменной или массива, а затем использовать их в команде find?

Вот моя рабочая команда: В этой команде я touching файл с именем dumped внутри всех каталогов в текущих каталогах с maxdepth 1, за исключением ., ./tmp, ./garbage каталогов.

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

Если вы заметили, что я ввел жесткое кодирование в команде find для исключаемых каталогов.

Есть ли способ сохранить список в переменной и передать в команду find?

что-то вроде exclude_list=".|./tmp|./garbage" и потом его использовать?

Я попробовал следующее, но это не сработало:

find . -maxdepth 1 ! -path ${exclude_list}

1 Ответ

2 голосов
/ 03 июля 2019

Не проверено: использовать массив

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...