#bash #find #rename
#bash #Найти #переименовать
Вопрос:
У меня есть большая и беспорядочная коллекция файлов — эй, у кого их нет — некоторые из них представляют собой большие файлы формата JPG (в данном случае это произвольное число, скажем, 2,5 МБ), которые я хочу переименовать — я хочу изменить расширение с *.jpg
на *.jpeg.
Я бы хотел сделать это с помощью сценария оболочки, который я запускаю BASH 3.2.39(1)
, и у меня такое чувство, что это «простая» задача с find
, увы, я нахожу синтаксис find трудным для запоминания, а справочную страницу невозможно прочитать.
Любая помощь с этим будет высоко оценена.
Комментарии:
1. Размер файлов здесь не важен.
2. Вы хотите сказать, что хотите переименовывать только файлы размером более 2,5 МБ?
3. Я думаю, у Хаммарстрома это получилось; да, я хочу переименовать файлы размером более 2,5 МБ или каким-то другим пороговым значением.
Ответ №1:
Поиск и переименование больших файлов может быть выполнено следующим образом:
find . -size 2500k -exec rename -s .jpg .jpeg '{}' ';'
Комментарии:
1. Я понимаю, для
Unknown option: s
чего-s
предназначена опция?2. @Dan: Зависит от того, какой
rename
файл у вас на компьютере. Дистрибутивы на основе Debian используют perlprename
. Используйтеrename.ul
вместо этого. Смотрите bugs.debian.org/cgi-bin/bugreport.cgi?bug=4399353. спасибо @christoffer-hammarstrom; Я использовал
rename.ul
без-s
флага, и это сработало; в то время как с-s
флагом это не сработало.4. @Dan не могли бы вы, пожалуйста, отметить этот ответ как правильный? Поскольку вы написали, что он сделал то, что должен, я думаю, это был правильный ответ.
Ответ №2:
Какую ОС вы используете? В большинстве репозиториев есть приложение под названием mmv, которое идеально подходит для такого рода задач..
использование:
mmv *.jpg #1.jpeg
Комментарии:
1. Однако это не влияет на размер файла.
Ответ №3:
Установите rename (стандартный инструмент в вашей установке Linux или с помощью homebrew для Mac), затем:
rename -s .jpg .jpeg *
или, если у вас также есть файлы в подкаталогах:
rename -s .jpg .jpeg $(find . -name '*.jpg')
Комментарии:
1. Однако это не влияет на размер файла.
Ответ №4:
for i in *.jpg
do
new_name= $(echo $i|sed 's/.jpg/.jpeg/')
mv $i $new.name
done
Комментарии:
1. опять же … как это различает в зависимости от размера файла?