Работать с файлами проще, чем с командами.Поэтому вместо использования команды ssh
для доступа к удаленным хостам и команды tar
для доступа к архивам используйте файловую систему SSHFS для доступа к файлам на удаленных хостах
mkdir hostname-dir.tmp
sshfs user@hostname:/dir hostname-dir.tmp
for a in hostname-dir.tmp/*.tgz; do tar xvf "$a"; done
fusermount -u hostname-dir.tmp
YouМожно даже пойти еще дальше и AVFS для доступа к архивам как к каталогам¹.Все это предоставлено FUSE , универсальной структурой для доступа ко всем видам вещей в виде файлов.
mountavfs
mkdir hostname-dir.tmp
sshfs user@hostname:/dir hostname-dir.tmp
for a in ~/.avfs$PWD/hostname-dir.tmp/*.tgz; do cp -Rp "$a#"/* .; done
fusermount -u hostname-dir.tmp
Если ваша оболочка - zsh, этот цикл for
можно заменить на квалификатор glob .
cp -Rp ~/.avfs$PWD/hostname-dir.tmp/*.tgz(e\''reply=($REPLY\#/*)'\') .
¹ AVFS также может обращаться к удаленным файлам через SSH, но я не думаю, что вы можете получить доступ к удаленным архивам таким образом: пути AVFS имеют толькоодиночный прыжокТак что SSHFS все еще необходим.