Исключить список каталогов из команды поиска unix

Исключить список каталогов из команды поиска unix

Мне нужно составить список файлов, присутствующих в каталоге, а также передать файл, содержащий список каталогов, которые следует исключить.

Я видел следующее предложение, но оно мне не подошло, когда дело дошло до флага типа:

find $dir_name $(printf "! -name %s " $(cat $exclude_file))

Есть ли способ сделать это или мне придется создать весь список, а затем работать с ним, удаляя те, которые частично совпадают с теми, что находятся в каталоге исключений?

решение1

Учитывая, что ваш exclude_fileсодержит пути, а не имена, вам нужно использовать -pathдля сопоставления его записей. Чтобы исключить подкаталоги соответствующих каталогов, вам также нужно -pruneих. Это должно сработать:

find . -type d \( $(printf -- "-path */%s -o " $(cat "$exclude_file")) -false \) -prune -o -print

Если вы хотите только просмотреть файлы, вы можете распечатать только файлы:

find . -type d \( $(printf -- "-path */%s -o " $(cat "$exclude_file")) -false \) -prune -o -type f -print

Связанный контент