Я наконец понял это ...
Команда find
может использоваться для выполнения любой команды для каждого найденного файла.
find . -name "*.tar" -execdir tar -vxf '{}' \; -delete
Рекурсивно сопоставлять имена файлов ( find
) в текущем каталоге (.
), имя которых соответствует регулярному выражению ( -name
) любому, что заканчивается точкой tar ( *. Tar "
) (двойные кавычки не позволяют bash расширять глобальный объект * .tar - в моем буквальном тесте из-за окружающих обстоятельств мне приходилось перед каждой цитатой ставить обратную косую черту).Затем для каждого совпадающего файла выполните tar
в каталоге найденного файла ( -execdir tar
) с подробным описанием ( -v
) и извлеките собранные файлы ( -x
) из архива ( -f
), расположенного find
( '{}'
) (одинарные кавычки предотвращают интерпретацию оболочки локального имени файла), указывающего конец списка параметров, который должен быть передан в tar
для каждого совпадающего файла ( \;
) (обратная косая черта предотвращает понимание точки с запятой оболочкой), а затем сообщает find
для удаления каждого совпадающего файла, как указано параметром, переданным в find
( -delete
).