Как распаковать набор файлов в каталоге?

В каталоге около 10 000 файлов, некоторые из которых являются .fits, а некоторые из них – .tar. Теперь мне нужно распаковать только файлы .tar. Хотя выполнение условия if представляется разумным, команда untar «xvf» работает только для каждого файла, что наносит ущерб использованию цикла.

команда untar «xvf» работает только для каждого файла

что делает использование цикла необходимым :

for file in ./*.tar; do tar xvf "$file"; done 

Фактически с помощью find вы можете выполнять работу без циклов. Как это:

 find -iname '*.tar' -maxdepth 1 -exec tar xvf '{}' \; 

Логика такова:

  • -iname сопоставляет файлы с расширением .tar (без -iname регистра) и
  • -maxdepth 1 ограничивает диапазон соответствия до глубины 1 (так что ./*/*.tar и тому подобное не будут согласованы)
  • finally -exec выполняет команду tar xvf в согласованных файлах (обратите внимание, что и {} требуется экранирование, обратитесь к find(1) за дополнительной информацией)