найти совпадающие файлы в одном каталоге и подкаталогах

Я использовал Percona XtraBackup для создания сжатой резервной копии, но теперь мне нужно распаковать файлы. В инструкциях говорится, что я должен запускать:

for bf in `find . -iname "*\.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done 

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

Я попытался запустить:

 for bf in `find . -iname "/path/to/my/directory/*.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done 

Но это дало ошибку:

 find: warning: Unix filenames usually don't contain slashes (though pathnames do). That means that '-iname `/path/to/my/directory/*.qp'' will probably evaluate to false all the time on this system. 

Как я могу это сделать?

  • Найти команду для поиска дерева каталогов
  • Передавать аргумент xargs как строку в другую команду с помощью '>'?
  • Команда find: опции «-mindepth» конфликтуют с действием «-prune»
  • Использование find -exec как печатать имя файла перед каждой строкой?
  • Удаление пустых каталогов командой 'ls'
  • Исключить каталоги в поиске местоположения
  • Как написать скрипт для автоматической компиляции и установки всех модулей Moksha?
  • Каковы проблемы безопасности и условия гонки при использовании `find -exec`?
  • 2 Solutions collect form web for “найти совпадающие файлы в одном каталоге и подкаталогах”

    Ошибка сообщает вам, где ошибка. Нет имен файлов, заканчивающихся на /directory/*.qp . Параметр -iname – это правильное имя файла, а не путь.

    Таким образом, вам следует предшествовать команде cd /path/to/my/directory/ или написать команду find как find /path/to/my/directory/ -iname "*.qp" что вам нужно: начиная с этого каталога , проверьте все имена файлов, соответствующие *.qp .

     for bf in `find . -iname "*\.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done for bf in `find . -iname "/path/to/my/directory/*.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done 

    Обе эти команды имеют ряд проблем. Наиболее очевидно, что они не могут обрабатывать необычные имена файлов, как зацикливаясь на выходе find и не указывая переменные.

    Тогда, конечно, есть факт, что имя файла никогда не будет содержать косой черты, как указано в полученной вами ошибке.


    Вы хотите:

     find /path/to/my/directory -type f -iname '*.qp' -exec sh -c 'for f in "$@"; do qpress -d "$f" "$(dirname "$f")" && rm "$f"; done' find-sh {} + 

    Или альтернативная версия с разрывами строк:

     find /path/to/my/directory -type f -iname '*.qp' -exec sh -c ' for f do qpress -d "$f" "${f%/*}" && rm "$f" done' find-sh {} + 

    Дальнейшее чтение:

    • Почему происходит перебор находок на выходе плохой практики?
    • Почему мой сценарий оболочки задыхается от пробелов или других специальных символов?
    • В чем разница между $ (stuff) и `stuff`?
    Interesting Posts

    Как определить успех программы при выполнении последовательности подобных задач?

    Удалить случайно извлеченные файлы

    Одновременное выполнение нескольких команд

    Минимизировать PHP.CGI.Argument.Injection и дальнейшее упрощение веб-сервера Centos 6.4

    Как я могу включить полный режим без пробелов в Linux, используя CONFIG_NO_HZ_FULL?

    Как запустить службы, использующие сеанс D-Bus?

    Если бы я записал CDROM, то всегда получаю точную копию CDROM?

    Запись внутри сокета, открытого другим процессом в Linux

    Построить мини Linux и встроенный Linux

    Учетная запись для недостающего места, как указано в списке ZFS

    HP Business Inkjet 1000 не работает на debian wheezy из-за просроченных чернильных картриджей

    Перенаправление портов по шлейфу с IP-адресом, кроме 127.0.0.1

    Как udev получает номера устройств для создаваемых им устройств?

    Установите метки времени для нескольких файлов / папок для существующих

    Возможно ли преобразовать настройку bios в Uefi?

    Linux и Unix - лучшая ОС в мире.