LINUX.ORG.RU
ФорумAdmin

Переименовать файлы


0

0

есть количесто каталогов с файлами вида J02_33.swf
вот только неприятность в том что на самом деле они должны быть вида j02_33.swf
тоесть перая буква должна быть маленькой (так прописано в html страничках откуда они подцепляются)
из-за этого в венде всё работает хорошо, поскольку там регистр файлов не критичен а в линуксе засада.

Подскажите способ (скрипт) для переименования Jxx_xx.swf > jxx_xx.swf
(рекурсивного)
anonymous

Если имена файлов и директорий без пробелов и прочих спец. символов, то
это как 2 байта переслать:

find /где/оно/лежит -type f -name 'J*.swf' | while read FILE; do
	dir="$(dirname $FILE)"
	name="$(basename $FILE | sed -e 's/^J/j/')"
	NEW_FILE="$dir/$name"
	if [ -f "$NEW_FILE" ]; then
		echo "Опа, а файл $NEW_FILE уже существует."
		echo "Оставляем $FILE в покое."
	fi
	mv $FILE $NEW_FILE
done

P.S.

Не мешало бы почитать какое-нибудь руководство по shell и man find.

Dselect ★★★
()

Я страшный ламер в perl, sed и awk, поэтому не пиннайте сильно :).

cd <нужная папка>
for oldname in `ls J?*.swf`; do
    newname=`echo $oldname | sed s/^J/j/g`;
    mv $file $newname;
    done

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Про идеологически неверные программы

> Вообще, есть проги типа rename для этого :).

Во-первых, (IMHO) проще написать скрипт в 5 строчек, чем на каждый чих искать (и осваивать) программу.

Во-вторых, как только задача становится чуть-чуть сложнее, "проги типа rename" сходу обламываются. Например, нужно переименовать файлы с такими-то именами, созданные не более чем 2 дня назад, и содержащие данную строку. И всё равно придётся писать скрипт.

Dselect ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.