У меня есть 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