1

У меня есть 150 подпапок. Видимо 4 из них не имеют файлов, которые должны быть в них, с именем PKA.dump

Как запустить команду в linux, чтобы определить, в каких папках отсутствует файл PKA.dump?

3 ответа3

1

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 . Это может или не может быть желательным для вас.

0

Предполагая, что вы хотите искать один уровень подкаталогов, я рекомендую простой цикл Bash:

for f in * ; do [ -d "$f" -a ! -e "$f/PKA.dump" ] && echo "$f" ; done

То есть, «для всех (не скрытых) записей в этом каталоге, если это каталог, а внутри PKA.dump не существует, выведите имя каталога».

0

Вы можете перечислить папки в каждом файле (с помощью 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .