Deve-se notar que 7z
não respeita as permissões corretamente, pois não armazena o proprietário / grupo do arquivo, etc. Não é ideal para backups no Unix, então usei tar.7z
no script abaixo, que ainda proporcionará uma boa compactação. Se você realmente quiser, basta especificar .7z
, mas perderá os dados de permissões.
Você precisará instalar atool
dos repositórios porque eu o uso para simplificar a extração de vários formatos. Você também precisará do p7zip
:
sudo apt-get install atool p7zip
Basta digitar o seguinte script no seu editor de texto, salvá-lo e torná-lo executável. Em seguida, basta executá-lo na pasta desejada (mas veja as notas importantes abaixo para ver como ele funciona).
(A linha de comando de localização neste script é usada em esta questão aqui .
#!/bin/bash
find -mindepth 2 -type f -print -exec mv {} . \;
mkdir my_files
aunpack -e * -X my_files/
apack -O-mx=9 imp_files.tar.7z my_files/
mv imp_files.tar.7z /home/$USER/
exit 0
Notas importantes:
-
Os arquivos das subpastas desejadas são entregues no diretório em que o script é executado, a menos que você queira adicionar a linha
cd /home/$USER/""
à parte superior do script e colocá-la em~/bin
e, em seguida, chame-o comscript_name desired_folder
. -
Os arquivos são encontrados e depois movidos para o pwd (diretório de trabalho atual) e, em seguida, um novo diretório é criado e todos eles são extraídos para ele. Eu usei
aunpack
eapack
do pacote atools, pois eles permitem que vários tipos de arquivos sejam manipulados de uma só vez. Veja minha resposta aqui para mais informações;aunpack
é ótimo, pois permite que você extraia todos os tipos de arquivos, sem precisar executar separadamentetar
,7z
, etc. -
Após os arquivos terem sido extraídos para a pasta especificada, essa pasta é compactada como tar e, em seguida, um arquivo 7zip com compactação máxima (
mx=9
). Por fim, esse arquivo resultante é movido para a base da sua pasta pessoal.
No script, não excluí os arquivos obtidos dos subdiretórios; você pode adicionar isso se desejar e adaptar o script às suas necessidades, mas espero que isso seja útil para aprender sobre scripts básicos.