Иногда мне нужно переименовать некоторое количество файлов, например добавить префикс или удалить что-то.Сначала я написал скрипт на Python.Это хорошо работает, и я хочу версию оболочки.Поэтому я написал что-то вроде этого:
$ 1 - какой каталог перечислить, $ 2 - какой шаблон будет заменой, $ 3 - заменой.
echo "usage: dir pattern replacement"
for fname in `ls $1`
do
newName=$(echo $fname | sed "s/^$2/$3/")
echo 'mv' "$1/$fname" "$1/$newName&&"
mv "$1/$fname" "$1/$newName"
done
Это работает, но очень медленно, возможно потому, что этонеобходимо создать процесс (здесь sed
и mv
), уничтожить его и создать тот же процесс снова, чтобы иметь другой аргумент.Это правда?Если да, то как этого избежать, как получить более быструю версию?
Я подумал предложить всем обработанным файлам имя (используя sed
для их одновременной обработки), но ему все еще нужно mv
в цикле.
Скажите, пожалуйста, как выребята это делают?Благодарю.Если вам трудно понять мой вопрос, наберитесь терпения, мой английский не очень хорош, извините.
--- update ---
Прошу прощения за описание.Мой основной вопрос: «Если мы должны использовать какую-то команду в цикле, это снизит производительность?»Потому что в for i in {1..100000}; do ls 1>/dev/null; done
создание и уничтожение процесса займет большую часть времени.Так что я хочу: «Есть ли способ уменьшить эту стоимость?».
Спасибо kev и SRI за предоставление мне rename
решения для переименования файлов.