2013-05-29 3 views
5

Так у меня есть куча файлов, как:Bash скрипт для удаления ведущих пробелы из файлов имена

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 

и мне нужно, чтобы иметь ведущие пробелы, снятую в Баш или рыбы сценария.

+0

Вы имеете в виду, что вы переименовываете файлы, чтобы не иметь пробелов впереди, или эти имена файлов хранятся в текстовом файле, и вам нужно их обработать? – lurker

+0

Я хочу переименовать файлы, чтобы не иметь пробела впереди. – Acklavidian

ответ

5

Чтобы удалить начальные пробелы символ в именах файлов, предоставляемых вы можете использовать:

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

Это:

  • изменяет IFS только быть символами новой строки; таким образом, он не задыхается от пробелов в именах файлов.
  • находит все файлы, начинающиеся с пробела в текущем каталоге.
  • перемещает каждый файл в имя файла без начального пробела, используя bash подстановку подстроки.
+0

Вот и все! Я всегда забываю о IFS. Именно это и убило мой собственный сценарий. благодаря – Acklavidian

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

Это быстро и грязно.

+0

нет идите. Я получаю это 'usage: mv [-f | -i | -n] [-v] исходная цель mv [-f | -i | -n] [-v] источник ... directory – Acklavidian

+0

Интересно. Я побежал в оболочке bash, и это сработало для меня. Я просто сделал это снова, чтобы быть уверенным: я копировал и вставлял эти строки точно в мой терминал оболочки, и он переименовал мои файлы, которые начинались с места в файлы, которые не начинаются с места. Я запускаю Fedora 17 Linux. Какой вкус Unix вы используете? – lurker

0

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

должен сделать трюк. Захват stdout и запись в файл.

+0

Я хочу удалить ведущие пробелы в именах файлов. Не содержимое файла. Хорошая попытка, хотя. – Acklavidian

0

Для этого вам не нужно sed. Просто используйте bash строковую функцию:

for file in /path/to/files/*; 
    do mv "$file" "${file# *}"; 
done 
Смежные вопросы