Ищем пробелы в названиях файлов (в текущем каталоге) и заменяем их на "_" (знак подчеркивания).
find . -maxdepth 1 -name "* *" -type f | while read src; do mv "$src" `echo $src | tr " " "_"`; done
maxdepth 1 - указывает на то чтобы переименование было только в текущем каталоге, если надо рекурсивно по каталогам, начиная от текущего:
find . -name "* *" -type f | while read src; do mv "$src" `echo $src | tr " " "_"`; done
+++
Заменяем символы в верхнем регистре на нижний + заменяем пробелы на "_".
#!/bin/bash
IFS="$(printf '\n\t')"
for file in ./* ; do
if [ -f "$file" ] ; then
f=$(echo $file | tr A-Z a-z | tr ' ' _)
if [ ! "$file" == "$f" ] ; then mv "$file" "$f"; fi
fi
done
unset IFS
В соответствии с http://www.dwheeler.com/essays/filenames-in-shell.html
+++
Только удалить пробелы из названий файлов, в текущем каталоге:
#!/bin/bash
IFS="$(printf '\n\t')"
for file in ./* ; do
if [ -f "$file" ] ; then
f=$(echo $file | tr -d ' ')
if [ ! "$file" == "$f" ] ; then mv "$file" "$f"; fi
fi
done
Для тестирования - перед командой mv добавить echo, переименовывать не будет, только отобразит как это будет происходить, например:
#!/bin/bash
IFS="$(printf '\n\t')"
for file in ./* ; do
if [ -f "$file" ] ; then
f=$(echo $file | tr -d ' ')
if [ ! "$file" == "$f" ] ; then echo mv "$file" "$f"; fi
fi
done
+++
+++
Чтобы посмотреть как это работает:
echo " test test test " | tr -d ' '
результат:
Тоже самое используя sed:
echo " test test test " | sed 's/ //g'
результат:
echo " test test test " | sed 's/ /_/g'
результат:
+++
+++
Еще один вариант:
#!/bin/bash
IFS=$'\n'
for f in `find .`; do
file=$(echo $f | tr [:blank:] '_')
[ -e $f ] && [ ! -e $file ] && mv "$f" $file
done
unset IFS
Однострок:
IFS=$'\n';for f in `find .`; do file=$(echo $f | tr [:blank:] '_'); [ -e $f ] && [ ! -e $file ] && mv "$f" $file;done;unset IFS
+++
И интересный способ с find - верхний регистр в нижний, текущий каталог.
find . -type f -name '*[A-Z]*' -execdir bash -c 'mv "$0" "$(echo "$0" | tr "[:upper:]" "[:lower:]")"' {} \;
История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.