У меня есть 150 подпапок. Видимо 4 из них не имеют файлов, которые должны быть в них, с именем PKA.dump
Как запустить команду в linux, чтобы определить, в каких папках отсутствует файл PKA.dump?
У меня есть 150 подпапок. Видимо 4 из них не имеют файлов, которые должны быть в них, с именем PKA.dump
Как запустить команду в linux, чтобы определить, в каких папках отсутствует файл PKA.dump?
https://askubuntu.com/a/196963
Просто, это выясняется. Ниже приведен список каталогов с обложкой и сравнение со списком всех каталогов второго уровня. Строки, которые появляются в обоих "файлах", подавляются, оставляя список каталогов, которые нуждаются в обложках.
comm -3 \
<(find ~/Music/ -iname 'cover.*' -printf '%h\n' | sort -u) \
<(find ~/Music/ -maxdepth 2 -mindepth 2 -type d | sort) \
| sed 's/^.*Music\///'
Ура.
Заметки:
Аргументы comm следующие:
-1 подавить строки, уникальные для file1-2 подавить строки, уникальные для file2-3 подавить строки, которые появляются в обоих файлахcomm принимает только файлы, поэтому метод ввода kooky <(...) . Это передает содержимое через настоящий [временный] файл.
comm нуждается в сортированном вводе, или он не работает, и find ни в коем случае не гарантирует порядок. Это также должно быть уникальным. Первая операция find может найти несколько файлов для cover.* Поэтому могут быть повторяющиеся записи. sort -u быстро сводит их к одному. Вторая находка всегда будет уникальной.
dirname - это удобный инструмент для получения dir файла без обращения к sed (и др.).
find и comm оба немного запутаны с их выводом. Последний sed - для очистки, так что вы остаетесь с Artist/Album . Это может или не может быть желательным для вас.
Предполагая, что вы хотите искать один уровень подкаталогов, я рекомендую простой цикл Bash:
for f in * ; do [ -d "$f" -a ! -e "$f/PKA.dump" ] && echo "$f" ; done
То есть, «для всех (не скрытых) записей в этом каталоге, если это каталог, а внутри PKA.dump не существует, выведите имя каталога».
Вы можете перечислить папки в каждом файле (с помощью ls -1 folder | sort > file1 и т.д.), diff для файлов. Это перечислит вам различия между файлами:
Скажем, у меня есть 2 папки vc и vc2 . Я генерирую списки так:
ls -1 vc | sort > vc.txt
ls -1 vc2 | sort > vc2.txt
Тогда я могу видеть различия как это:
diff vc.txt vc2.txt
который производит:
< requirements.txt
что означает , что requirements.txt отсутствует ('<' указывает на отсутствие) от vc2.txt (второй линии diff