Відповіді:
Просто використовуйте bash, не потрібно викликати зовнішні команди.
for file in *_h.png
do
mv "$file" "${file/_h.png/_half.png}"
done
Не додавати #!/bin/sh
Для тих, хто потребує цього одноколірного:
for file in *.png; do mv "$file" "${file/_h.png/_half.png}"; done
Do not add #!/bin/sh? Я спробував обидві роботи з / без цього твердження.
#!/bin/bash. Це сказано, bash - це звичайно оболонка за замовчуванням у багатьох комп’ютерах, тому ви не знайдете багато відмінностей: D Ви можете знайти більше інформації тут
Спробуйте renameкоманду:
rename 's/_h.png/_half.png/' *.png
Оновлення:
Приклад використання:
створити деякий зміст
$ mkdir /tmp/foo
$ cd /tmp/foo
$ touch one_h.png two_h.png three_h.png
$ ls
one_h.png three_h.png two_h.png
тестовий розчин:
$ rename 's/_h.png/_half.png/' *.png
$ ls
one_half.png three_half.png two_half.png
ls? що rename ...ти намагаєшся?
renameне є стандартним інструментом Unix.
brew install rename
's//'- я посилався на людину і був простий конспект:, rename [options] expression replacement file...на CentOS 7, версія:rename from util-linux 2.23.2
.відповідає БУДЬ-який символ, а не лише крапка - для буквальної крапки використовуйте \.натомість
for f in *.png; do
fnew=`echo $f | sed 's/_h.png/_half.png/'`
mv $f $fnew
done
mv $f $fnewз echo $fnewяк друга лінія впевнена зробити висновок виглядає здоровою.
Шукаєте чистого рішення? Є багато підходів, але ось один.
for file in *_h.png ; do mv "$file" "${file%%_h.png}_half.png" ; done
Це передбачає, що єдиними файлами в поточному каталозі, які закінчуються, _h.pngє файли, які ви хочете перейменувати.
Набагато конкретніше
for file in 0{5..6}_h.png ; do mv "$file" "${file/_h./_half.}" ; done
Якщо припустити, що ці два приклади - ваш єдиний. файли.
У загальному випадку, перейменування файлів в уже було охоплено до того .
Використовуйте renameутиліту, написану на перл. Можливо, це не доступно за замовчуванням, хоча ...
$ touch 0{5..6}_h.png
$ ls
05_h.png 06_h.png
$ rename 's/h/half/' *.png
$ ls
05_half.png 06_half.png
У мене було подібне питання: У посібнику описано перейменування як
rename [option] expression replacement file
тож ви можете використовувати його таким чином
rename _h _half *.png
У коді: '_h' - це вираз, який ви шукаєте. '_half' - це шаблон, який ви хочете замінити. '* .png' - це діапазон файлів, які ви шукаєте для можливих цільових файлів.
Сподіваюся, що це може допомогти c:
Інший підхід може бути вручну, використовуючи опцію пакетного перейменування
Клацніть правою кнопкою миші на файл -> Файл користувацьких команд -> Перейменування партії, і ви можете замінити h. з половиною.
Це буде працювати для Linux на основі gui, використовуючи WinSCP тощо
Використовуйте renameутиліту:
rc@bvm3:/tmp/foo $ touch 05_h.png 06_h.png
rc@bvm3:/tmp/foo $ rename 's/_h/_half/' *
rc@bvm3:/tmp/foo $ ls -l
total 0
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 05_half.png
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 06_half.png
Хоча набір відповідей завершений, мені потрібно додати ще одну, яка відсутня.
for i in *_h.png;
do name=`echo "$i" | cut -d'_' -f1`
echo "Executing of name $name"
mv "$i" "${name}_half.png"
done