Замена пробелов в именах файлов и папок

Материал из Lblss.ru
Перейти к: навигация, поиск

Содержание

Для чего?

В ряде случаев пробел в имени файла требует несколько особой обработки. Дело в том, что в UNIX-подобных системах пробелом традиционно разделяются аргументы. Следовательно, если имя файла или директории содержит в себе пробел, то последний надлежит экранировать. Скока юзеру ни говори, а он все равно будет создавать всякие там "Новая папка" и "Текстовый документ.txt". Можно это считать аксиомой :-) Ладно, попробуем переименовать. приурочим это действо к еженощному бекапу, например.

remove_sp.sh

для Linux

#!/bin/bash
 
# if [ $1 ]
# then
#   cd $1 # переход в указанный каталог
# else
#   echo 'Use: remove_sp.sh directory'
#   exit 1
# fi
 
# специальный заменитель для особо тупорылых юзверей
d=`date '+%Y%m%d%H%M'` 
 
while [ 0 -lt `find . -maxdepth 1 -name "* *" | wc -l` ]
do # есть имена с пробелами
  if [ !`rename " " "_" *` ] # попробуем переименовать по простому...
  then # просто заменить пробел на _ не удалось, наверно такое имя уже есть
    rename " " _${d}_ *
  fi
done
 
exit 0

В текущей директории ищет файлы и папки с пробелами в именах. Сначала пытается заменить пробелы на нижнее подчеркивание. В случае неудачи меняет на достаточно уникальный код (дату).

для FreeBSD

Для начала придется установить команду rename

# cd /usr/ports/sysutils/rename/
# make && make install && make clean

Следует отметить, что синтаксис у нее несколько другой, нежели в Linux.

#!/bin/bash
Персональные инструменты