Как выполнить несколько выражений с помощью опции -exec в Linux через команду find?

Как выполнить несколько выражений с помощью опции -exec в Linux через команду find?

Я прочитал пост наКак выполнить несколько команд при использовании find?Если я правильно понял предоставленный ответ, я не считаю, что он дает искомое мной решение.

Мое требование — найти определенный набор файлов. Если найден, то создать каталог. Если каталог был успешно создан, то только извлечь файлы. После извлечения удалить исходные файлы. Как я смогу этого добиться?

решение1

Ссылка, которую вы разместили, дает "правильный" ответ, по моему мнению. Просто создайте оболочку. Без этого у вас не будет достаточно большого набора инструментов. Вымогпостроить команду поиска в псевдокоде, например:

find /path -criteria -exec mkdir {} \; -exec extract {} \; -exec rm {} \;

Это остановит при любой ошибке, так как предикаты естественным образом объединены в and. Но это не дает вам достаточного контроля над именованием каталога. Это гарантированно приведет к сбою.

Создание оболочки решает эту проблему, поскольку в вашем распоряжении будет весь язык оболочки:

find /path -criteria -exec /bin/sh '
    for d; do
        mkdir "${d##*/}" && tar xvf "$d" && rm "$d"
    done' _ {} +

Обратите внимание, что эта версия имеет побочный эффект продолжения при возникновении ошибки для любой заданной итерации цикла — она порождает одну оболочку длявсерезультаты. Я бы посоветовал запустить оболочку с флагом -e, если вы хотите жестко остановиться при любой ошибке.

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