Como usar o bash para arquivar todos os diretórios?

1

Estou tentando aprender bash - lentamente - mas acho difícil entender os aspectos mais técnicos sem um exemplo de palavra real que se encaixa em algo que eu gostaria de usar. Para esse fim, gostaria de saber como usar o bash (e o 7zip) para arquivar algumas fotos em preparação para armazená-las on-line.

Essencialmente, imagino que isso seja tão simples quanto criar um arquivo .7z de cada diretório, atribuindo a cada arquivo o mesmo nome do diretório relevante. Todos os diretórios foram nomeados sem espaços, isso importa.

Grato por todos os conselhos.

    
por Tay 14.12.2015 / 17:44

1 resposta

4

A maneira de compactar um diretório foo em um arquivo chamado foo.7z usar 7z é usar o comando a ("add"):

7z a foo.7z foo

Para fazer isso em vários diretórios, pode-se usar um loop:

for dir in foo bar baz; do
    7z a "$dir".7z "$dir"
done

(Isto é seguro contra nomes de diretórios que incluem espaços, porque $dir é citado, mas não contra nomes de diretório que começam com um traço; esses resultariam em 7z tentando interpretá-los como opções.)

Se o nome dos diretórios que você pretende arquivar compartilhar um padrão, você poderia usar isso no loop for, em vez de listar todos os diretórios explicitamente, por ex. for dir in [0-9][0-9][0-9][0-9][0-9][0-9]-*; ... .

Note que a documentação do 7z adverte contra o uso do formato 7z para fins de arquivamento no Unix, porque não preserva a propriedade em formação. Isso pode ou não importar para você.

    
por 14.12.2015 / 17:57

Tags