Como compactar arquivos com o mesmo nome, mas extensão diferente?

0

Eu tenho um diretório grande com arquivos como este:

file1.txt
file1.meta
file1.csv
file2.txt
file2.meta
file2.csv
file2.abc

e gostaria de criar arquivos zip como:

file1.zip
file2.zip

Eu tentei

ls -1 ~/TEMP | sed 's/\.[a-z]*//g' | uniq | awk '{print $NF}' | xargs -i zip {}.zip ~/TEMP/{}.*

Mas isso só dá uma mensagem de erro de que o arquivo não pode ser financiado. O problema é com o curinga * eu acho.

zip error: Nothing to do! (file1.zip)
    zip warning: name not matched: /home/user/TEMP/file.*
    
por Michael 15.01.2018 / 05:44

1 resposta

0

Uma maneira, no bash (desde que você marcou):

  1. Reúna a lista de prefixos de nomes de arquivos em uma matriz associativa:

    declare -A prefixes
    for f in *; do prefixes[${f%%.*}]=1; done
    
  2. Faça um loop pelos prefixos e crie os arquivos zip:

    for p in "${!prefixes[@]}"; do zip "$p" "$p".*; done
    
por 20.01.2018 / 02:43

Tags