Рекурсивная замена пробелов на подчеркивания в именах файлов и каталогов: различия между версиями
Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
Lazyklimm (обсуждение | вклад) м |
Rain (обсуждение | вклад) м (опечатка) |
||
(не показано 9 промежуточных версий 4 участников) | |||
Строка 1: | Строка 1: | ||
Скрипт позволяющий | Скрипт позволяющий заменять пробелы на подчеркивание в именах файлов. | ||
---- | |||
<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"> | ||
_rrename () { | |||
do | cd $1 # идем в нужный каталог | ||
mv "$ | 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
}