2010-11-11 16 views
13

Sto provando a rinominare tutti i file nella directory corrente in modo che il nome in maiuscolo sia convertito in basso. Sto cercando di fare in questo modo:xargs per eseguire una stringa - cosa sto facendo male?

ls -1|gawk '{print "`mv "$0" "tolower($0)"`"}'|xargs -i -t eval {} 

ho due file nella directory, Y e YY -t aggiunto per il debug, e l'uscita è:

eval `mv Y y` 
xargs: eval: No such file or directory 

se eseguo il eval da solo, funziona e muove da Y a y.

So che ci sono altri modi per raggiungere questo obiettivo, ma mi piacerebbe farlo funzionare se posso! Cheers

risposta

19

eval è una shell builtin command, non un eseguibile standalone. Pertanto, xargs non può eseguirlo direttamente. Probabilmente si desidera:

ls -1 | gawk '{print "`mv "$0" "tolower($0)"`"}' | xargs -i -t sh -c "{}" 
+0

OK, grazie - che funziona. Un po 'più di quanto pensassi. –

+5

Realizzato non è necessario l'eval (o il 's) con questo metodo. quindi ls -1 | gawk '{print "mv" $ 0 "" tolower ($ 0)}' | xargs -i -t sh -c "{}" funziona pure –

2

Anche se si sta guardando una soluzione xargs, un altro metodo per eseguire la stessa cosa può essere fatto con tr (supponendo sh/bash/sintassi ksh):

for i in *; do mv $i `echo $i | tr '[A-Z]' '[a-z]'`; done 
+0

sì, probabilmente è il migliore - è un codice simile a un collega, ma diviso su più righe, e usando una variabile - che ha provocato la domanda - puoi farlo in 1 linea? Mi sono poi distratto cercando di far funzionare gli xargs –

+0

Sì, quello che ho lasciato sopra funzionerà senza modifiche. Indipendentemente da cosa hai a che fare, i punti e virgola sono il separatore di istruzioni se vuoi combinare più istruzioni su una riga. –

1

Se i file sono creati da utenti creativi, si vedrà file come:

My brother's 12" records 

Le soluzioni finora non funzionano su quel tipo di file. Se si dispone di GNU parallelo installato questo funzionerà (anche sui file con nomi creativi):

ls | parallel 'mv {} "$(echo {} | tr "[:upper:]" "[:lower:]")"' 

Guarda il video introduttivo per imparare di più: http://www.youtube.com/watch?v=OpaiGYxkSuQ

Problemi correlati