GNU/Linux >> Znalost Linux >  >> Linux

Příkaz pro komprimaci více adresářů do jednotlivých souborů ZIP?

Mám jeden adresář, který obsahuje desítky adresářů.

Jsem nový v příkazovém řádku a snažím se přijít s příkazem, který zazipuje každý podadresář do jedinečného souboru podadresář.zip.

Takže nakonec bude můj primární adresář vyplněn všemi mými původními podadresáři plus odpovídající .zip soubory, které obsahují zazipovaný obsah každého podadresáře.

Je něco takového možné? Pokud ano, ukažte mi, jak se to dělá.

Přijatá odpověď:

Tuto smyčku můžete použít v bash :

for i in */; do zip -r "${i%/}.zip" "$i"; done

i je název proměnné smyčky. */ znamená každý podadresář aktuálního adresáře a v těchto názvech bude obsahovat koncové lomítko. Ujistěte se, že cd na správné místo, než to provedete. "$i" jednoduše pojmenuje tento adresář, včetně koncového lomítka. Uvozovky zajišťují, že mezery v názvu adresáře nezpůsobí potíže. ${i%/} je jako $i ale s odstraněným koncovým lomítkem, takže jej můžete použít k vytvoření názvu souboru zip.

Pokud chcete vidět, jak to funguje, přidejte echo před zip a uvidíte příkazy vytištěné místo provedení.

Paralelní provádění

Chcete-li je spustit paralelně, můžete použít & :

for i in */; do zip -0 -r "${i%/}.zip" "$i" & done; wait

Používáme wait říct shellu, aby před ukončením počkal na dokončení všech úloh na pozadí.

Pozor, pokud máte ve svém aktuálním adresáři příliš mnoho složek, můžete zahltit svůj počítač, protože tento kód neomezuje počet paralelních úloh.


Linux
  1. Jak komprimovat více souborů v systému Linux

  2. Shell Script:Třídění souborů do adresářů a podadresářů?

  3. Maximální počet souborů/adresářů na Linuxu?

  1. Kopírování souborů a adresářů v Linuxu

  2. Linux Bash:Přesun více různých souborů do stejného adresáře

  3. cp pouze soubory, přeskakování adresářů

  1. Jak vytvořit více zipů z adresáře obsahujícího milion souborů Xml?

  2. Rozbalte všechny soubory v adresáři

  3. Rozdělte obrázek dd do více souborů