2013-05-29 16 views
5

Così ho un gruppo di file come:script Bash per rimuovere principali spazi bianchi dal file nomi

Aaron Lewis - Country Boy.cdg 
Aaron Lewis - Country Boy.mp3 
Adele - Rolling In The Deep.cdg 
Adele - Rolling In The Deep.mp3 
Adele - Set Fire To The Rain.cdg 
Adele - Set Fire To The Rain.mp3 
Band Perry - Better Dig Two.cdg 
Band Perry - Better Dig Two.mp3 
Band Perry - Pioneer.cdg 
Band Perry - Pioneer.mp3 

e ho bisogno di avere gli spazi leader rimosso in bash o pesce script.

+0

Vuoi dire che stai rinominando i file per non avere lo spazio bianco davanti, o questi nomi di file sono memorizzati in un file di testo e devi elaborarli? – lurker

+0

Voglio rinominare i file per non avere lo spazio bianco davanti. – Acklavidian

risposta

5

Per rimuovere il principale spazio char bianco nei nomi dei file che hai fornito è possibile utilizzare:

IFS=$'\n' 
for f in $(find . -type f -name ' *') 
do 
    mv $f ${f/\.\/ /\.\/} 
done 

questo:

  • cambia l'IFS solo essere personaggi newline; in questo modo non soffoca gli spazi bianchi nei nomi dei file.
  • trova tutti i file che iniziano con uno spazio bianco nella directory corrente.
  • sposta ciascun file in un nome file senza spazi bianchi iniziali, utilizzando la sostituzione della sottostringa bash.
+0

Questo l'ha fatto! Mi dimentico sempre di IFS. Era quello che stava uccidendo la mia sceneggiatura. Grazie – Acklavidian

0
for x in \ * ; do 
    mv "$x" `echo "$x" | sed "s/^ +//"` 
done 

Questo è veloce e sporco.

+0

no go. Prendo questo 'uso: mv [-f | -i | -n] [-v] source target mv [-f | -i | -n] [-v] fonte ... directory' – Acklavidian

+0

Interessante. Ho eseguito questo in una shell bash e ha funzionato per me. L'ho fatto di nuovo per essere sicuro: ho copiato e incollato esattamente quelle righe sul mio terminale di shell e ha rinominato i miei file che iniziarono con lo spazio in file che non iniziano con lo spazio. Sto usando Fedora 17 Linux. Che sapore di Unix stai correndo? – lurker

0

cat <file> | sed -e 's/^[ ]*//'

dovrebbe fare il trucco. Cattura lo stdout e scrive su un file.

+0

Sto cercando di rimuovere gli spazi iniziali nei nomi dei file. Non il contenuto del file. Buona prova però. – Acklavidian

0

Per questo non è necessario sed. Basta usare bash funzione di stringa:

for file in /path/to/files/*; 
    do mv "$file" "${file# *}"; 
done 
Problemi correlati