Как создать команду «find» для поиска поврежденных файлов *.pages, *.key и *.numbers?

Как создать команду «find» для поиска поврежденных файлов *.pages, *.key и *.numbers?

У меня есть 3 типа файлов типа *.pages, *.keyи *.numbers.

  1. Неповрежденные файлы:все в порядке.
  2. Поврежденные файлы типа I:Где соответствующая программа может отображать текст, но все изображения теряются.
  3. Поврежденные файлы типа II:Где соответствующая программа больше не может открыть файлы.

Я хотел бы создать два .txtфайла: один с перечнем путей ко всем файлам с повреждениями типа I, а другой с перечнем путей ко всем файлам с повреждениями типа II.

Я придумал эту findкоманду, которая предоставляет мне файлтип-II.txtс полным путем к файлам с повреждением типа II:

find . \( -name "*.pages" -or -name "*.numbers" -or -name "*.key" \) -and -size 102c > type-II.txt

И я придумал эту другую findкоманду, которая предоставляет мне файлтип-I-и-II.txtс полным путем к файлам с повреждениями типа I и типа II

find . -type f -name "Properties.plist" > type-I-and-II.txt

Какую команду следует использовать в терминале для предоставления файлатип-I.txtперечислить путь только к поврежденным файлам типа I?

решение1

Файл втип-II.txtсписок — это путь и имя файла, например, ./document.pages. Если тот же файл встречается втип-I-и-II.txtв листинге он указан как ./document.pages/Metadata/Properties.plist.

Используйте эту команду для созданиятип-I.txtв котором перечислены файлы втип-I-и-II.txtкоторые не перечислены втип-II.txt:

sed 's|/Metadata/Properties.plist$||' type-I-and-II.txt | sort - type-II.txt | uniq -u > type-I.txt

Команда sedудаляет "/Metadata/Properties.plist" из имен файлов втип-I-и-II.txtlisting. Вывод команды sedпередается команде sort. sortКоманда объединяет оба файла в отсортированный список. Команда uniqвыбирает только те файлы, которые встречаются один раз в отсортированном списке, то есть файлы, перечисленные втип-I-и-II.txtно не втип-II.txt.

Связанный контент