Paolo Larcheri wrote:
Toshiro:/tmp# IFS="" Toshiro:/tmp# for i in $(ls); do mv $i /any/path/; done mv: impossibile fare stat di `f 1.txt\nf 2.txt': No such file or directory
Marco Ciampa wrote: > ls|while read i ; do mv $i /tmp ; done >Infatti, come diceva Flavio, i parametri vanno messi tra virgolette (doppie) quando potenzialmente la loro espansione può contenere spazi; non ho provato la ricetta di Marco, ma direi che soffre dello stesso problema. Per quanto riguarda la prima, da bash(1):
vvvvvvvvvvvvvvvvvvvvvvv IFS L' Internal Field Separator (separatore di campo interno) che è usato per la suddivisione in parole dopo l'espansione e per dividere le linee in parole con il comando incorporato read. Il valore di default è ``<space><tab><newline>''. ^^^^^^^^^^^^^^^^^^^^^^^ e più avanti: vvvvvvvvvvvvvvvvvvvvvvv Suddivisione in parole La shell scandisce il risultato dell'espansione di parametro, sosti- tuzione di comando ed espansione aritmetica, che non si trovano tra vir- golette, per effettuare la suddivisione in parole. La shell tratta ogni carattere di IFS come un delimitatore, e spezza in parole, in coincidenza di questi caratteri, i risultati delle altre espansioni. Se il valore di IFS è esattamente <space><tab><newline>, il default, allora qualsiasi sequenza di caratteri IFS serve per delimitare le parole. Se IFS ha un valure diverso dal default, allora sequenze di caratteri di spaziatura space e tab sono ignorati all'inizio e fine di parola, fin tanto che il carattere di spaziatura è nel valore di IFS (un carattere di spaziatura IFS ). Qualunque carattere in IFS che non è un carattere di spaziatura IFS, insieme con qualsiasi carattere di spaziatura IFS adiacente, delimita un campo. Una sequenza di caratteri di spaziatura IFS è anche trattata come un delimitatore. Se il valore di IFS è nullo, non avviene alcuna suddivisione in parole. IFS non può essere non posto. ^^^^^^^^^^^^^^^^^^^^^^^Che, a parte la traduzione un po' febbricitante, spiega quando entra in gioco la separazione in parole. Proprio per evitare questo genere di garbugli preferisco da sempre la forma che usa xargs(1), molto più potente, in genere più efficiente, e sempre più sicura, ma Napo la escludeva esplicitamente... ma che ha i suoi "difetti" (vedi il recente thread "Cambiare ricorsivamente il proprietario di file (e cartelle)")
Ciao, lele. -- Per iscriversi (o disiscriversi), basta spedire un messaggio con OGGETTO "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx