Назад | Перейти на главную страницу

Список каталогов, не содержащих файла

Я видел похожие вопросы по этому поводу, но я не могу найти ничего, связанного непосредственно с файлами.

Есть ли способ дать мне список каталогов, в которых нет определенного файла?

Пример:

/dir1/good
/dir1/stuff
/dir2/junk
/dir2/morejunk
/dir3/good
/dir4/junk

Я хотел бы запустить команду поиска, в которой я возвращал бы только те имена каталогов, которые не содержат файл «хорошо» (dir2 и dir4). Есть ли способ сделать это с помощью find или какой-либо их комбинации? Единственный способ сделать это сейчас - выполнить поиск файла «good», сохранить этот вывод и использовать некоторые команды awk, sort и comm -3, чтобы получить различие для того, что мне нужно.

Есть ли более простой способ сделать это?

Ты можешь использовать -exec test ... чтобы проверить наличие файла в каталоге, например

find /path/to/search -type d \! -exec test -e '{}/good' \; -print

Вы можете легко сделать это с помощью find и GNU parallel:

$ file=foo && find . -type d | parallel -j+0 "[ -f {}/$file ] || echo $file not in {}"

Эта команда работает путем параллельной подачи всех каталогов в текущем каталоге. Затем Parallel запускает параллельные задания для проверки наличия файла foo в каждом каталоге и выводит сообщение, если файл не существует в каталоге.