2016-04-20 2 views
1

У меня есть каталог, имеющие подкаталоги, содержащие файлы изображения с неправильным именем, такими как filename.jpg.jpg я хочу, чтобы заменить эту recursiveley с filename.jpg я попробовал:Как заменить рекурсивно часть имени файла в Баше

find ./ -type f -exec sed -i 's/string1/string2/g' {} \; 

или

sed -i 's/foo/bar/g' * 

но никто не работает

спасибо

+0

Я предлагаю вам использовать инструмент 'rename', он достаточно мощный для массового переименования. – smartmic

ответ

1
find ./ -iname "*.jpg.jpg" -exec rename .jpg.jpg .jpg '{}' \; 

Если у вас есть rename утилита, которая использует перл регулярные выражения, а затем использовать следующую команду:

find ./ -iname "*.jpg.jpg" -exec rename 's/\.jpg\.jpg$/.jpg/' '{}' \; 
+0

это отлично работает для меня, команда rename не работает – papacico

+0

Я получаю следующее здесь: 'синтаксическая ошибка в (eval 1) строка 1, рядом с..' ' – volpato

+0

@volpato: Извините, что это все около? – sjsam

1

Может быть, вы можете использовать встроенную rename команду.

rename 's/\.jpg\.jpg$/.jpg/' *.jpg.jpg 

Первый аргумент является регулярное выражение, которое будет матч имена файлов, оканчивающиеся на .jpg.jpg и заменить .jpg. Второй аргумент будет посмотреть для файлов с .jpg.jpg формат в текущем каталоге.

Для получения дополнительной информации прочитайте страницу руководства.

+0

Ограничена ли она текущей папкой? – sjsam

+0

Нет. Вы можете указать путь к папке для поиска файлов. – Aditya

Смежные вопросы