Мертвая простота.
Как мне переименовать
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
У меня был аналогичный вопрос: в руководстве описывается переименование как
rename [option] expression replacement file
так что вы можете использовать это таким образом
rename _h _half *.png
В коде: '_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 i in *_h.png;
do name=`echo "$i" | cut -d'_' -f1`
echo "Executing of name $name"
mv "$i" "${name}_half.png"
done