Исключение нескольких типов файлов с помощью find

#bash #find

#bash #Найти

Вопрос:

У меня есть папка с более чем 20 тысячами изображений, и большинство файловых менеджеров с графическим интерфейсом (например, dolphin) не могут управлять таким объемом данных.

Поэтому я решил использовать bash вместо этого. Моя проблема заключается в следующем:

  • большинство *.IMG *.LBL файлов — это файлы или
  • Меня не интересуют эти файлы. Я ищу другие
  • с find . -type f -not -name "*.LBL" помощью я могу видеть все файлы вместо *.LBL
  • с find . -type f -not -name "*.IMG" помощью я могу видеть все файлы вместо *.IMG
  • оба не очень полезны, поскольку они все еще заполняют мой терминал
  • либо объединение обоих, похоже, не работает:
 find . -type f -not -name "*.LBL" -o -not -name "*.IMG"
  

Каков правильный способ просмотра файлов внутри папки, исключая несколько файловых буферов?

Ответ №1:

Групповые условия, я думаю, -o -not работает не так, как ожидалось. Попробуйте это:

 find . -type f -not ( -name "*.LBL" -o -name "*.IMG" )
  

Ответ №2:

Вы можете использовать расширенное сопоставление шаблонов bash (возможно, его придется включить в скрипте с shopt -s extglob помощью ; обычно включен по умолчанию в интерактивной оболочке):

 printf "%sn" !(*.LBL|*.IMG)
  

Комментарии:

1. также работало, но поскольку find это намного быстрее, чем ваше решение (а также немного ближе к моему вопросу) Я принимаю другой ответ. Но приятно, что что-то подобное тоже работает.

2. Если в этой задаче так важна скорость, вы можете попробовать Rust find как fd

3. Я удивлен, что они не совпадают. Возможно, из-за сортировки имен файлов, выполняемой глобусом.

4. Скорость не так важна, но она была заметна между обоими решениями.