Descompacte arquivos específicos de vários arquivos zip

2

Sou novo no Unix e estou tentando extrair nome de arquivo padrão específico dos vários arquivos zip. Estou usando find para encontrar os arquivos zip e, em seguida, tentando extrair arquivos com o nome do arquivo CTL no arquivo zip, a*b*zip .

$ unzip -jn 'find $source_dir -mtime -$st_d -daystart -iname "a*zip"' \
    *CTL* -d $target_dir'

Além disso, tentei usar:

$ find -type f -newermt $start_date \! -newermt $end_date -name "a*zip" \
    | while read filename; do unzip -d $target_dir; done;'

mas isso está extraindo todos os arquivos, mas estou procurando apenas os arquivos que possuem o nome de arquivo CTL .

    
por Yasin 25.04.2015 / 02:52

1 resposta

1

Você pode simplesmente fazer isso usando find -exec sozinho.

find . -type f -name '*.zip' -exec unzip {}  '*CTL*' -d "$target_dir" \;

Explicação: -exec executará o seguinte comando em cada arquivo encontrado, onde {} é substituído pelo nome do arquivo. O comando deve ser finalizado por ; . Use \; no final (';' escapou com \ ) para evitar que seu shell interprete ; como uma finalização para find , em vez disso, ele é passado para find como texto normal.

Além disso, observe que é uma boa prática incluir os padrões de arquivo entre aspas quando eles são transmitidos como argumentos, ou seja, '*CTL*' em vez de apenas *CTL* . Ao fazer isso, você evita que seu shell expanda os nomes dos arquivos. Por exemplo, suponha que, neste caso, um dos seus arquivos zip tenha CTL em seu nome de arquivo (digamos, abcCTL.zip ). Se você usar apenas *CTL* para o padrão, o shell irá expandi-lo e, em vez de passar um padrão para unzip , ele passará o nome do arquivo abcCTL.zip , o que claramente não é o que você deseja.

    
por 25.04.2015 / 04:31

Tags