Como descomprimir recursivamente arquivos gz em um host remoto com comandos limitados?

5

Eu tenho um monte de .jpg.gz arquivos em um diretório que eu preciso descomprimir.

Eu sei que o comando de descompactação é:

tar -xzvf FileNameHere.jpg.gz

Mas há um sinalizador de que você pode recursivamente descompactar os arquivos em um diretório? Tenho mais de cem arquivos compactados e não quero descompactar manualmente cada um deles.

Além disso, como sou um SSH em um serviço de hospedagem, só tenho os seguintes comandos para usar:

arch
bzip2
cal
cksum
cmp
cp
crontab
basename
cd
chmod
ls
date
df
du
dos2unix
unix2dos
file
getfacl
gzip
head
hostid
tail
mkdir
mv
nslookup
sdiff
tar
uptime
wget
whois
unzip
    
por Fortuna Iwasaki 11.05.2016 / 18:10

3 respostas

8

Para extrair seus arquivos, você precisa usar gzip :

gzip -d *.jpg.gz

Você menciona isso de forma recursiva; dado que você não tem find , você terá que visitar cada diretório por vez e executar o comando acima.

    
por 11.05.2016 / 18:13
8

Se o shell do host para o qual você está ssh é a versão bash > = 4.0, você pode ative a opção globstar . Quando ativado, o ** glob corresponderá aos subdiretórios de forma recursiva. Então, o seguinte deve fazer o que você precisa:

shopt -s globstar
for gz_file in **/*.jpg.gz; do
    gzip -d "$gz_file"
done

Nenhuma recursão manual em subdiretórios é necessária.

    
por 11.05.2016 / 21:09
3

Enquanto um script de shell pode ser escrito para reciclar os diretórios (mas eu não acho que você tenha acesso a um sh remoto), você poderia usar este atalho bruto, mas efetivo, supondo que seu ssh restrito remoto faz a expansão de curingas:

gzip -d *.jpg.gz
gzip -d */*.jpg.gz
gzip -d */*/*.jpg.gz
...

... dependendo da profundidade e tamanho dos subdiretórios.

Observação: se você tem muitos arquivos, pode acabar excedendo a linha de comando limite de comprimento

edit: Isso costumava incluir uma resposta usando ls -R, mas isso não fornece caminhos completos.

    
por 11.05.2016 / 20:28

Tags