No Linux, qual seria a melhor maneira de zerar recursivamente vários diretórios de uma só vez? [duplicado]

1

Eu tenho um diretório, /dir , e ele está cheio de outros diretórios sem esquema de nomenclatura comum. Então, /dir/EqcWTG /dir/SomeDirectoryName /dir/3435346 e assim por diante.

Eu gostaria de transformar cada um desses diretórios em um arquivo zip. Então, basicamente, quero executar $ zip -r directoryname.zip directoryname em todos os diretórios em $(pwd) .

Qual seria a maneira mais fácil de conseguir isso?

    
por Mella 09.02.2015 / 03:35

1 resposta

3

Usando find isso deve funcionar:

find /dir -not -name "dir" -maxdepth 1 -type d -exec zip -r '{}.zip' '{}' \;

Observe como eu tenho /dir como o caminho principal find , mas também tenho -not -name "dir" para que o diretório pai não seja arquivado. Em seguida, limitamos a profundidade da varredura de find com -maxdepth 1 , o que significa que find pesquisará somente os filhos imediatos do caminho /dir . Depois disso, nos certificamos de apenas atuar em diretórios com -type d . E finalmente usamos -exec para executar o comando mágico zip que comprimirá recursivamente todos os diretórios que encontrar; {} apenas equivale ao nome do diretório em si.

Outro tato seria usar -mindepth 1 em vez de -not -name "dir" apenas no caso de um diretório aninhado na estrutura pai /dir de alguma forma também usar o nome de /dir ou ter "dir" como parte dele nome:

find /dir -mindepth 1 -maxdepth 1 -type d -execdir echo {} \;

Agora, eles criariam arquivos ZIP que se expandiriam para o caminho /dir completo; /dir/EqcWTG , /dir/SomeDirectoryName , /dir/3435346 , etc ... Se você quisesse arquivos ZIP autônomos / parecidos, poderia usar -execdir em vez de -exec da seguinte forma:

find /dir -not -name "dir" -maxdepth 1 -type d -execdir zip -r '{}.zip' '{}' \;

Mesma ideia de -execdir , mas com -mindepth 1 em vez de -not -name "dir" :

find /dir -mindepth 1  -maxdepth 1 -type d -execdir zip -r '{}.zip' '{}' \;

Como -execdir força o comando find a atuar no diretório real em que encontrou algo - em vez do caminho completo - esse comando criaria arquivos ZIP com nomes semelhantes que se expandiriam para diretórios relativos denominados EqcWTG , SomeDirectoryName , 3435346 , etc… Mas, novamente, o uso / opções finais que você escolher dependerá das suas necessidades finais de arquivamento de ZIPs.

    
por 09.02.2015 / 03:42

Tags