Devo creare un file zip per l'archiviazione di ~ 100k file da una directory contenente ~ 500k file. Ottengo errori "Elenco argomenti troppo lungo" quando provo i comandi ovvi:
zip archive.zip *pattern*.txt # fails
zip archive.zip `find . -name "*pattern*.txt"` # fails
Un approccio consiste nell'utilizzare l' -@
opzione per alimentare un elenco di file tramite via stdin:
find . -name "*pattern*.txt" | zip -@ archive.zip
Tuttavia, la zip
pagina man dice:
Se un elenco di file viene specificato come - @ [Non su MacOS], zip prende l'elenco dei file di input dall'input standard anziché dalla riga di comando.
È il "Non su MacOS" a infastidirmi. Sono andato avanti e ho provato l' -@
opzione, e sembra funzionare; ma mi sento nervoso sul fatto che stia davvero facendo il lavoro giusto (archiviando tutti i file, intatti).
Ecco le mie domande:
- Perché
-@
non andrebbe bene su MacOS? - Esistono alcune versioni di MacOS / bash / zip in cui questo avviso è vero e altre in cui non lo è? È un avvertimento obsoleto e, in tal caso, dov'è la linea di demarcazione?
- Quale sarebbe un approccio praticabile per questo problema senza l'utilizzo
-@
?
Si noti che la soluzione fornita qui zip: Elenco argomenti troppo lungo (80.000 file in totale) non funzionerà; Devo archiviare alcuni, non tutti, i file nella directory.
Sto eseguendo Mac OS 10.7.5. Ecco alcune informazioni sulla versione:
$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)
$ zip --version
This is Zip 3.0 (July 5th 2008), by Info-ZIP.
...
Compiled with gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00) for Unix (Mac OS X) on Jun 24 2011.