GNU/Linux >> Linux Esercitazione >  >> Linux

Come creare un tar compresso quando ci sono troppi nomi di file perché la shell possa espandersi su una singola riga?

Come soluzione robusta, usa find per separare i nomi dei file con un carattere nullo, quindi reindirizzare direttamente a tar , che legge un input delimitato da null:

find . -maxdepth 1 -name '*.csv' -print0 |
tar -czf archive.tgz --null -T -

Questo ora gestirà tutto correttamente i nomi dei file e non è nemmeno limitato dal numero di file.

Utilizzando ls generare un elenco di nomi di file che devono essere analizzati da un altro programma è un antipattern comune che dovrebbe essere evitato quando possibile. find può generare output delimitato da null (-print0 ) che la maggior parte delle utilità può leggere o analizzare ulteriormente. Poiché il carattere null è l'unico carattere che non può apparire in un nome di file (e il / , ovviamente), sarai sempre al sicuro con quello.


No, non puoi accodare un file tar compresso senza prima decomprimerlo.

Tuttavia, tar può accettare il suo elenco di file da elaborare da un file, quindi puoi semplicemente fare:

ls *.csv > temp.txt
tar -zcf ball.tgz -T temp.txt

@slhck sottolinea che la soluzione di cui sopra non funzionerà se ci sono spazi (e probabilmente altri caratteri fastidiosi) nei nomi dei file. Questa versione racchiude ogni nome di file tra virgolette:

ls *.csv | sed -e 's/^\(.*\)$/"\1"/' > temp.txt
tar -zcf ball.tgz -T temp.txt

(Questo ovviamente si interromperà se hai le virgolette doppie nei nomi dei tuoi file, nel qual caso ottieni ciò che ti meriti. :)


Linux
  1. Come estrarre il file tar.gz in Linux utilizzando la riga di comando

  2. Come fare in modo che sudo ricordi la password più a lungo

  3. Esistono convenzioni di denominazione per le variabili negli script della shell?

  4. Come visualizzare i caratteri di controllo (^c, ^d, ^[, …) in modo diverso nella shell?

  5. Come unire la riga successiva quando una riga corrisponde a un'espressione regolare per l'intero documento in Vi?

Come cercare file dalla riga di comando di Linux

Come cancellare il numero di riga in Vim durante la copia?

Come aggirare il limite di Linux Too Many Arguments

Come rimuovo il percorso completo quando eseguo una compressione tar.gz?

Come stampare l'ultima riga di un file compresso gz nella riga di comando?

Come posso avviare una seconda shell in modalità utente singolo?