Descompacte um arquivo para seu diretório atual

1

Eu descobri que extrair um .zip você precisa do caminho para o diretório também quando estiver procurando de forma recursiva por subdiretórios. Então, como você armazena o caminho? Isso está quase lá, mas não funciona corretamente quando há um espaço no {zip_file} .

zip_dir=$PWD/$(basename "${zip_file}")
    
por JohnnyBizzle 24.05.2015 / 16:21

2 respostas

2

Eu também criei essa da sua outra pergunta. Demorei um pouco, mas foi assim que consegui criar as pastas com base no nome do arquivo zip, removendo o .zip do nome da pasta e depois extraindo o arquivo zip para essa pasta.

#!/bin/bash

echo "Start folder create..."
find . -type f -iname "*.zip" | while read filename
do
 filename1=${filename:2}
 foldername=$PWD/"${filename1%.*}"
 mkdir -p "$foldername"
 unzip "$filename" -d "$foldername"
 echo "Created directory $foldername and extracted files to it." 
done

A linha filename1=${filename:2} retira o ./ do nome.

    
por Terrance 24.05.2015 / 17:44
0

Edit: Eu não devo ter testado isso corretamente.

Geralmente, você não precisa de cotações ao fazer uma atribuição de variável, apenas ao desreferenciar uma variável. Ao fazer uma atribuição, você não precisa colocar aspas em torno de uma variável que está sendo desreferenciada, mas como a desreferenciação acontece em um sub shell, são necessárias citações em torno da parte ${zip_file} para que seu valor seja passado corretamente para o basename. Aspas são NÃO necessárias na verdade em torno de toda a linha, porque então elas estão de volta no contexto da atribuição de variáveis, onde aspas não são necessárias, pois o bash fará a coisa certa ao passar o valor do subshell para a linha de atribuição.

Obrigado @janos por apontar isso. Não tenho certeza do que estraguei ao testar a linha original que me levou ao caminho de cotações excessivas. Você está correto, o seguinte é bom:

zip_dir=$PWD/$(basename "${zip_file}")
    
por Stephen 24.05.2015 / 16:53