(EDIT in soluzione con sed)Bash sfugge e caratteri jolly tilde, ma non lo spazio
Ho una lista di nomi di file e directory, tra cui tilde e caratteri jolly. Es .:
~/docs/file.*
~/my docs/*.txt
...
Ho letto le righe e passare ad un comando (ad esempio rsync):
while read ROW
do
rsync $ROW /my/dest/
done < list.txt
Il problema sta gestendo con spazi di nomi. Se metto $ ROW tra virgolette come questo
rsync "$ROW" /my/dest/
naturalmente bash non sfugge i caratteri jolly né la tilde. Ma se non uso le virgolette, lo spazio spezza la riga.
Una possibile soluzione è la modifica IFS (attentamente: lo script è più complicato di quello che ho segnalato). Un'altra soluzione (grazie per la correzione a Patrick Echterbruch) è quella di evitare gli spazi. Tuttavia, il seguente codice non funziona per me:
while read ROW
do
export NEWROW=$(echo $ROW | sed -e 's/ /\\ /g')
echo "Value: $NEWROW"
ls -1d $NEWROW
done < list.txt
Si prega di notare che non vengono passate citazioni a ls. Il file "~/a b c/test.txt" esiste, ma ottengo:
Value: ~/saver/a\ b\ c/*.txt
ls: impossibile accedere a ~/saver/a\: Nessun file o directory
ls: impossibile accedere a b\: Nessun file o directory
ls: impossibile accedere a c/*.txt: Nessun file o directory
Sembra come newRow è passato a ls come una stringa, quindi i caratteri jolly non sono espansi, ma lo spazio mantiene rompere il nome del file, però sfuggito.
Qualche consiglio? Grazie.
Si prega di vedere [questo riguardo all'espansione del tilde] (http://mywiki.wooledge.org/BashPitfalls#echo_.22.2BAH4.22). –