X
    Categories: Практикум

Боремся с пробелами в именах файлов


Пробелы в именах файлов очень часто могут создавать немалый “геморрой”. Кто работает в консоли, тот меня поймет. Недавно возникла необходимость массово перекодировать группу видео файлов из одного формата в другой. Но скрипт не сработал, т.к. в именах файлов были эти самые злополучные пробелы.



Чтобы вместо пробелов появились нижние подчеркивания нужно зайти в нужный каталог и выполнить команду либо скрипт. Для этого заходим в каталог, выполнив команду в Терминале:

cd /путь к каталогу/

А теперь выполним следующий скрипт, который заменит пробелы на нижнее подчеркивание, либо другой нужный символ:

#!/bin/sh
for i in *.mp4
do
k=`echo ${i}|sed s/' '/'_'/g`
mv "${i}" ${k}
done

Вместо *.mp4 установите свое расширение файлов, в которых нужно совершить изменение имен. Либо можно просто перечислить нужные расширения файлов, тогда скрипт будет иметь следующий вид:

#!/bin/sh
for i in *.mp4 *.txt *.avi *.html *.odt
do
k=`echo ${i}|sed s/' '/'_'/g`
mv "${i}" ${k}
done

Но Linux не был бы Linux, если бы в нем не было массы вариантов для решения проблемы. Поэтому для борьбы с пробелами можно выполнять и другие команды, используя другие утилиты или программы. То же самое сделает команда:

ls | while read i; do mv "$i" ${i//_/ }; done

Или можно использовать утилиту rename:

rename 's/ /_/g' *

Но если вдруг после работы над этими файлами вы хотите снова вернуть пробелы в имена, тогда выполните команду:

rename 's/_/ /gi' *.mp4 *.txt *.avi *.html *.odt

Данная команда в пакетном режиме заменить нижнее подчеркивание на пробел.


admin-dm2003: