Мертвая простота.
Как мне переименовать
05_h.png
06_h.png
к
05_half.png
06_half.png
По крайней мере, я думаю, что это просто, но в Google сложно делать подобные вещи, если вы еще не знаете.
Благодарность....
Просто используйте 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 обычно является оболочкой по умолчанию на многих компьютерах, поэтому вы не найдетеПопробуйте
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
как вторая линия уверена сделать вывод выглядит здоровой.Вы ищете чистое решение для bash? Подходов много, но вот один.
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
утилитой, написанной на perl. Может быть, он недоступен по умолчанию ...$ 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
источник
for i in *_h.png ; do mv $i `echo "$i"|awk -F'.' '{print $1"alf."$2}'` done
источник
У меня был аналогичный вопрос: в руководстве описывается переименование как
так что вы можете использовать это таким образом
В коде: '_h' - это выражение, которое вы ищете. '_half' - это шаблон, которым вы хотите заменить. '* .png' - это диапазон файлов, которые вы ищете в качестве возможных целевых файлов.
Надеюсь, это поможет c:
источник
Другой подход может заключаться в ручном использовании опции пакетного переименования.
Щелкните правой кнопкой мыши файл -> Пользовательские команды файла -> Пакетное переименование, и вы можете заменить h. с половиной.
Это будет работать для графического интерфейса на основе Linux с использованием 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 file in *.php ; do mv "$file" "_$file" ; done
источник
Хотя набор ответов полный, мне нужно добавить еще один отсутствующий.
for i in *_h.png; do name=`echo "$i" | cut -d'_' -f1` echo "Executing of name $name" mv "$i" "${name}_half.png" done
источник