![Использование xargs для создания команды find, которая исключает список каталогов из переменной среды](https://rvso.com/image/83675/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20xargs%20%D0%B4%D0%BB%D1%8F%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B%20find%2C%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D0%B0%D1%8F%20%D0%B8%D1%81%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D0%B5%D1%82%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%20%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2%20%D0%B8%D0%B7%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9%20%D1%81%D1%80%D0%B5%D0%B4%D1%8B.png)
Я знаю, как исключить определенные каталоги из find
: find <path> ! -path <path to exclude>
. Но это может быть слишком утомительно для набора, когда мне нужно исключить много каталогов, или просто невозможно использовать, когда список каталогов, которые мне нужно исключить, заранее неизвестен.
Итак, скажем, у меня есть список каталогов, хранящихся в переменной. Могу ли я использовать xargs
для построения find
команды, которая исключает каждый из этих каталогов? Если да, то как?
решение1
Для случая «простой» переменной обратите внимание, что каталоги не могут содержать пробелы, поскольку именно они разделяют их внутри переменной.
excludes='dir1 dir2 dir3'
findexcl=
set -f
for p in $excludes
do
findexcl="$findexcl ! -path $p"
done
echo find ... $findexcl ...