Мне нужно составить список файлов, присутствующих в каталоге, а также передать файл, содержащий список каталогов, которые следует исключить.
Я видел следующее предложение, но оно мне не подошло, когда дело дошло до флага типа:
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