LINUX.ORG.RU

Преобразование имен файлов на bash


0

0

Есть куча файлов вида "Pictire 001.jpg" как сие наиболее правильно преобразовать в "Pictire_001.jpg" ?
Можно конечно на C программу на писать, но хочется сделать на bash.
В голову лезут только какие-то тупые варианты типа:
find ./ -name '*jpg' -exec echo {} >> ./tmp_file \;

Потом что-то типа:
cat ./tmp_file | sed -e 's/\ /_/'

А потом обработать этот файл чтобы получить их него скрипт перемещающий старое название в новое... Вот такой отстой...

Как бы это изящно сделать на bash ?

anonymous

rename 's/ /_/' *.jpg

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

Вариант с for не пропрет так как *.jpg преобразует поток
Picture 001.jpg Picture 002.jpg в
a = Picture
a = 001.jpg
a = Picture
a = 002.jpg

А про rename я не знал, спасибо !

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

> Вариант с for не пропрет так как *.jpg преобразует поток 

А проверить? :)

$ for a in *.jpg; do echo "$a" ${a// /_}; done
1 a.jpg 1_a.jpg
1 b.jpg 1_b.jpg
1 c.jpg 1_c.jpg
2 a.jpg 2_a.jpg
2 b.jpg 2_b.jpg
2 c.jpg 2_c.jpg
3 a.jpg 3_a.jpg
3 b.jpg 3_b.jpg
3 c.jpg 3_c.jpg
$

Если запишешь в скрипт и будешь передавать ./aaa.sh *.jpg - то да, не 
пройдет.

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

Да действительно... Мне казалось что порежет, оказывается даже так можно:
for planet in "Меркурий 36" "Венера 67" "Земля 93" "Марс 142" "Юпитер 483";

bash рулит ! :)

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