Introduzione
Uno dei miei server di sviluppo contiene milioni di file in una singola directory. Per liberare lo spazio su disco, abbiamo deciso di spostare su di essi una nuova cartella creata su un altro disco collegato allo stesso sistema. Quando ho provato a spostare il file con il comando mv
, ho ricevuto il seguente errore:
-bash: /bin/mv: Argument list too long
L'errore "Elenco argomenti troppo lungo" si verifica generalmente quando si passa un numero elevato di parametri a un singolo comando. Una variabile di sistema ARG_MAX definisce la lunghezza massima dei caratteri degli argomenti in un comando shell.
La soluzione
La soluzione rapida è utilizzare l'utilità della riga di comando xargs
o trovare il comando con -exec … {}. Entrambi i comandi interrompono un comando di grandi dimensioni in uno più piccolo e completano il lavoro senza errori.
Utilizzo di find with xargs – Il seguente comando sposterà tutti i file con estensione .txt nella directory di destinazione:
find . -name '*.txt' | xargs mv --target-directory=/path/to/dest_dir/
Utilizzo di find con exec: puoi anche utilizzare exec per eseguire la stessa attività:
find . -name '*.txt' -exec mv {} /path/to/dest_dir/ \;
I comandi sopra predefiniti navigheranno ricorsivamente alle sottodirectory. Per limitare la ricerca solo alla directory corrente, utilizzare -maxdepth
seguito dal numero limite alle sottodirectory:
find . -name '*.txt' -maxdepth 1 -exec mv {} /path/to/dest_dir/ \;
Puoi trovare il limite massimo con il comando getconf ARG_MAX
sulla shell.
Conclusione
In questo tutorial abbiamo visto come risolvere l'errore: "-bash: /bin/mv: Argument list too long"