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

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

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

21
задан Community
24.04.2023 16:18 Количество просмотров материала 3470
Распечатать страницу

1 ответ

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

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

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

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

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

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

3
отвечен falconindy 2023-04-26 00:06

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх