Я видел похожие вопросы по этому поводу, но я не могу найти ничего, связанного непосредственно с файлами.
Есть ли способ дать мне список каталогов, в которых нет определенного файла?
Пример:
/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 в каждом каталоге и выводит сообщение, если файл не существует в каталоге.