Рекурсивная замена пробелов на подчеркивания в именах файлов и каталогов: различия между версиями

Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
м
м (опечатка)
 
(не показано 9 промежуточных версий 4 участников)
Строка 1: Строка 1:
Скрипт позволяющий рекурсивно заменять пробелы на подчеркивание.
Скрипт позволяющий заменять пробелы на подчеркивание в именах файлов.


С помощью утилиты '''find''' указываем директории в которых хотим работать, '''while''' осуществляет циклическое действие, '''mv''' переименовывает файлы, '''echo''' выводит файлы для работы '''sed''', ну и, собственно, присходит замена.
----
<source lang="bash">
find path1 path2 -type f | while read full  # find - ищет файлы в указанном пути, while - осуществляет
do                                          # циклическое действие
name=${full##*/}                            # вырезаем имя файла, функция убирает все до последнего слеша "/",
mv -- "${full}" "${full%/*}/${name// /_}"    # оставляя только имя файла
done                                        # перемещаем старый файл (полное имя которого в переменной full) в
                                            # новый, образованный
                                            # именем файла (переменная name, в которой сделана замена пробела на _)
                                            # и путем
                                            # к нему (получен методом обрезания полного имени файла до первого
                                            # слеша)
</source>
----                               
Рекурсивное переименование всего в каталоге, указанном первым параметром. sh-compatible (должно работать даже на busybox)


----
<source lang="bash">
<source lang="bash">
find path1 path2 -type f | while read file
_rrename () {
do
    cd $1 # идем в нужный каталог
mv "${file}" "$(echo "${file}" | sed -re "s/ +/_/g")"
    ls -1 | while read f # получаем список файлов
done
    do
_f=`echo $f | sed 's/ /_/g'` # новое имя для текущего файла
/bin/mv -nT "$f" "$_f" 2>/dev/null # переименовываем (но вообще, лучше внимательно почитать man mv)
if [ -d "$_f" ]; then # если каталог
    _rrename "$_f" # повторяем для него данную функцию
    cd .. # и возвращаемся на уровень выше (обратно)
fi
    done
}
</source>
</source>
----
 


[[Category:Sed]][[Category:Bash-скрипт]][[Категория:Скрипт]]
[[Category:Sed]][[Category:Bash-скрипт]][[Категория:Скрипт]]

Текущая версия на 16:02, 19 февраля 2011

Скрипт позволяющий заменять пробелы на подчеркивание в именах файлов.


find path1 path2 -type f | while read full   # find - ищет файлы в указанном пути, while - осуществляет
do                                           # циклическое действие
name=${full##*/}                             # вырезаем имя файла, функция убирает все до последнего слеша "/",
mv -- "${full}" "${full%/*}/${name// /_}"    # оставляя только имя файла
done                                         # перемещаем старый файл (полное имя которого в переменной full) в
                                             # новый, образованный 
                                             # именем файла (переменная name, в которой сделана замена пробела на _)
                                             # и путем
                                             # к нему (получен методом обрезания полного имени файла до первого
                                             # слеша)

Рекурсивное переименование всего в каталоге, указанном первым параметром. sh-compatible (должно работать даже на busybox)

_rrename () {
    cd $1 # идем в нужный каталог
    ls -1 | while read f # получаем список файлов
    do
	_f=`echo $f | sed 's/ /_/g'` # новое имя для текущего файла
	/bin/mv -nT "$f" "$_f" 2>/dev/null # переименовываем (но вообще, лучше внимательно почитать man mv)
	if [ -d "$_f" ]; then # если каталог
	    _rrename "$_f" # повторяем для него данную функцию
	    cd .. # и возвращаемся на уровень выше (обратно)
	fi
    done
}