1. Shell script para compactação de múltiplos arquivos em múltiplos arquivos .zip
iberesmusa Outra
Post recolhido
Enviado em 03/06/2019 - 15:58h
Boa tarde,
Estou com necessidade de um script que compacte arquivos em lote, porém que dê como resultado vários arquivos zip.
Por exemplo: 1234.jpeg, 12345.jpeg, 123456.jpeg compactados em 1234.zip, 12345.zip, 123456.zip
2. Re: Shell script para compactação de múltiplos arquivos em múltiplos arquivos .zip
msoliverusa Debian
Post recolhido
Enviado em 03/06/2019 - 19:53h
iberesm escreveu:
Boa tarde,
Estou com necessidade de um script que compacte arquivos em lote, porém que dê como resultado vários arquivos zip.
Por exemplo: 1234.jpeg, 12345.jpeg, 123456.jpeg compactados em 1234.zip, 12345.zip, 123456.zip
Segue sugestão:
for ARQ in $(ls -1 *.jpeg);do
#Para tirar o .jpeg, use: sed 's/\..*//' <<< $ARQ
Compacta $ARQ
done
Importante => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver
3. Re: Shell script para compactação de múltiplos arquivos em múltiplos arquivos .zip
removidousa Nenhuma
Post recolhido
Enviado em 04/06/2019 - 20:17h
Caro iberesm,
Minha sugestão, em duas etapas:
Primeiro, ache os arquivos e pruduza uma lista deles.
Nesse exemplo, vamos procurar por todos os arquivos que tem ".jpg" no nome,
e aproveitando o comando find, vamos também executar o comando zip.
Aqui, -maxdepth 1 significa que ele só vai procurar no nível da pasta atual,
sem procurar nos subdiretórios.
Geralmente o que é padrão e o que você quer é
foto.jpg --> foto.jpg.zip,
Mas vamos usar o sed para fazer pequenas alterações no nome dos arquivos:
Agora, teremos que procurar por ".jpg.zip" para não puxar as fotos originais juntas...
Vamos usar o xargs para não incorrer em problemas com caminho de pastas
com um espaço em branco..
Fiquei pensando na sua pergunta, e como ontem eu estava
estudando Bash, resolvi fazer esse script.
Se você rodar ele com os argumento ".jpg", ele vai achar todos
as fotos com essa extensão, ou "expressão regular", e fazer
um zip. rode com somente "--help" para Ajuda e mais instruções.
Espero que possa ser útil, mas com certeza esse script
ficou muito, muito maior do que *precisava*..
#!/bin/bash
#
# ZIPDE - procura e transforma arquivos em zip
# < v0.3 - 2019/06/10 >
# por naufragus88
## Termo de Garantia e Copyleft
WARRANTY_NOTICE="
\033[012;36mZIPDE - Procura e Transforma Arquivos em ZIP\033[00m
\033[012;31mCopyright (C) 2019 naufragus88
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.\033[00m
"
## Funções relativas ao Aviso de Copyright
## e acesso à GNU Public License versão 3
if [[ ${*} = "show w" ]];
then
echo -e "${WARRANTY_NOTICE}"
exit
elif [[ ${*} = "show c" ]] &&
ping -q -c1 8.8.8.8 > /dev/null;
then
curl --connect-timeout 10 --fail \ https://www.gnu.org/licenses/gpl-3.0.txt
printf "\n"
exit
elif [[ ${*} = "show c" ]] &&
! [[ $(wc -l "${0}") -lt "910" ]];
then
tail -680 "${0}" # | awk '{$1=""}1' | awk '{$1=$1}1'
exit
elif [[ ${*} = "show c" ]];
then
echo -e "${WARRANTY_NOTICE}"
exit
fi
## Manual de Instruções e Ajuda
HELP_LINES="
NOME:
\033[01;36mZIP-De - Procura e Transforma Arquivos em ZIP\033[00m
DESCRIÇÃO:
Procura por arquivos que tenham na finalização dos
seus nomes uma determinada expressão regular ( ER )
e converte esses arquivos para o formato Zip.
Os novos arquivos são cópias dos originais.
A ER, também entendida como \"padrão repetitivo\", deve:
I) Ser comum a todos arquivos e
II) Fazer parte da finalização do nome
Ex. \".jpg\", \".txt\"...
Para uma coleção de arquivos do tipo:
XXXX_(ZZ)-foo_bar.tar, YYYY_(ZZ)-foo_bar.tar
WWWW_(KK)-foo_bar.tar e YYYY_(KK)-foo_bar.tar
A ER deve conter alguns caracteres
como \".tar\" ou ainda \"-foo_bar.tar\"
Não é mais necessário inserir opção de englobamento \"*\"
(dito \"globbing\") antes da ER.
Englobamento está ativado por padrão.
Existe uma função extra que pode ser chamada avulsamente.
Ela faz a renomeação de parte dos nomes dos arquivos que
obedeçam o padrão de ER, sem a restrição posicional descrita
no parágrafo anterior.
A função de substituição de partes do nome é interativa
e tem explicações ao londo da utilização.
OPÇÕES:
As opções devem ser lançadas antes do começo da execução
deste script! Depois de iniciada a busca pela ER, não
é possível modificar as opções ( insensibilidade à capitulação
e recursividade de pastas ).
-h ou --help
Mostra esta ajuda.
-i Insensitivo à capitulação ( Ex. foo = FoO ).
-r Recursivo nos subdiretórios da pasta de partida.
show c Mostra a GPLv3.
show w Mostra o Termo de Garantia.
-s ou --subst
Ativa função de substituição parcial dos
nomes dos arquivos (não roda função de zip).
-v Mostra a versão do programa.
Observe que as opções \"-i\" e \"-r\" devem ser lançadas
depois da ER. Já as demais opções, devem ser lançadas
sozinhas ( \"show c/w\", \"-s\" e \"-v\" ).
BUGS:
Distribuido sem suporte e sem correção de bugs.
Licenciado sob a licança GLPv3\n
"
## Função extra para substituição parcial do nome de arquivos
subst_function() {
DEPTHZ=1
INAMEZ="-name"
printf "Por favor, escolha uma das seguintes opções:\n\n"
printf ' (1) Recursivo do diretório de partida;\n'
printf ' (2) Capitulização Insensível;\n'
printf ' (3) Ambas\n'
printf ' (Enter) Nenhuma\n'
printf ' (q) Cancelar\n'
read -r -n 1 -p "==>" option
case $option in
1 ) DEPTHZ=30
printf "\nOK.\n"
;;
2 ) INAMEZ="-iname"
printf "\nOK..\n"
;;
3 ) DEPTHZ=30
INAMEZ="-iname"
printf "\nOK...\n"
;;
q ) printf "\n"
exit
;;
* ) #printf "\nEscolha uma opção válida ou Ctrl-C para Cancelar\n"
esac
printf "\nDefina expressão regular para substituir:\n"
printf "==>"
read -r ER0
printf ""
printf "e pelo que será substituída.\n\n"
printf "==>"
read -r ER1
## Checar pela presença do Zip no sistema
if ! command -v "zip" > /dev/null; then
printf "Pacote \"zip\" não encontrado no sistema.\n"
exit
fi
## Tenha certeza dos arquivos a serem zipados
printf "\nArquivos encontrados:\n\n"
find . -maxdepth "${DEPTH}" -type f "${INAME}" "*${1}" -print
printf "\nAviso: a expressão de busca deve conter\n"
printf " todo o final do nome dos arquivos,\n"
printf " incluindo sua extensão, se houver!\n"
printf " P. ex: \".jpg\"\n"
printf " digite \"h\" para mais Ajuda\n\n"
## Evitar deixar os arquivos com duas extensões
## e os arquivos zip espalhados pelos subdiretórios
# Cria novo diretório para os arquivos Zip criados
mkdir arq_zip
# Acha os arquivos com a ER os zipa
find . -maxdepth "${DEPTH}" -type f "${INAME}" "*${1}" -print0 \
-execdir zip "{}.ZIP" "{}" \;
# Reencontra novos arquivos zipados e move para pasta arq_zip
find . -maxdepth "${DEPTH}" -type f "${INAME}" "*${1}.ZIP" \
-exec mv -t "./arq_zip" {} +
# Retira as extensões antigas e adiciona somente ".zip"
find "./arq_zip" -maxdepth 1 -type f -iname "*${1}.ZIP" -print0 |
sed -ze "p;s/${1}.ZIP/.zip/" | xargs -0 -n2 mv
# Pronto
printf "\nArquivos zipados e movidos para \"./arq_zip\"\n"
Basicamente, adicionei a GPL v3 no script, já que é software livre,
não custa nada a gente distribuir e fazer propaganda da GPL..
No mais, ele está rodando aqui tranquilamente.
5. Re: Shell script para compactação de múltiplos arquivos em múltiplos arquivos .zip
paulo1205usa Ubuntu
Post recolhido
Enviado em 04/06/2019 - 23:22h
iberesm escreveu:
Boa tarde,
Estou com necessidade de um script que compacte arquivos em lote, porém que dê como resultado vários arquivos zip.
Por exemplo: 1234.jpeg, 12345.jpeg, 123456.jpeg compactados em 1234.zip, 12345.zip, 123456.zip
find . -maxdepth 1 -type f -iname \*.jpeg -print0 | \
while read -d $'\0' file; do
basename="${file#./}" # Remove o "./" do início do nome do arquivo (não chama programa externo).
no_suffix="${basename%.jpeg}" # Remove o sufixo ".jpeg" do nome do arquivo (não chama programa externo).
zip "${no_suffix}.zip" "${basename}" # Compacta.
done
Contudo, arquivos JPEG já costumam ter uma compressão bem grande. Você acha que vai ganhar muita coisa zipando-os?
... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)