Eu uso o seguinte comando para compactar todos os arquivos em um diretório paralelo:
cd /volume1/Backup/VHDX; for i in */; do zip -0 -r "${i%/}.zip" "$i" & done; wait
depois que todos os zips são criados, eu os movo para uma unidade USB formatada em NTFS da seguinte forma:
cd /volume1/Backup/VHDX; find . -name "*.zip" -exec cp {} /volumeUSB1/usbshare \;
Eu queria saber se eu poderia mover cada .zip diretamente para o local de destino, depois de criado (então adicione a cópia ao primeiro comando), em vez de criar todos os zips primeiro e só depois de todos serem criados comece a copiá-los. Há algum jeito?
Criar os zips diretamente na unidade USB é super lento (são muitos dados compactados), é por isso que estou criando primeiro localmente e só depois movo.
Vamos desamassar seu oneliner primeiro:
Agora mova os arquivos após
zip
terminar:Mas agora estamos compactando apenas um diretório por vez, possivelmente movendo os arquivos concluídos simultaneamente. Podemos contornar isso usando um subshell:
Como alternativa, você pode usar
pigz
em vez dezip
compactar um arquivo por vez, mas usando vários threads de CPU.