Respostas:
Basta usar o bash, sem necessidade de chamar comandos externos.
for file in *_h.png
do
mv "$file" "${file/_h.png/_half.png}"
done
Não adicione #!/bin/sh
Para aqueles que precisam dessa linha:
for file in *.png; do mv "$file" "${file/_h.png/_half.png}"; done
Do not add #!/bin/sh
? Eu tentei trabalhar com / sem esta declaração.
#!/bin/bash
. Dito isto, o bash é normalmente o shell padrão em muitos computadores para que você não vai encontrar muitas diferenças: D Você pode encontrar mais informações aqui
Tente o rename
comando:
rename 's/_h.png/_half.png/' *.png
Atualizar:
exemplo de uso:
criar algum conteúdo
$ 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
solução de teste:
$ rename 's/_h.png/_half.png/' *.png
$ ls
one_half.png three_half.png two_half.png
ls
? o que rename ...
você está tentando?
rename
não é uma ferramenta padrão do Unix.
brew install rename
's//'
- referenciei man e houve uma simples sinopse rename [options] expression replacement file...
rename from util-linux 2.23.2
.
corresponde a qualquer caractere, não apenas um ponto - para dot literal, use \.
em vez
for f in *.png; do
fnew=`echo $f | sed 's/_h.png/_half.png/'`
mv $f $fnew
done
mv $f $fnew
com echo $fnew
que a segunda linha para garantir que o sane aparência de saída.
Você está procurando uma solução pura para o bash? Existem muitas abordagens, mas aqui está uma.
for file in *_h.png ; do mv "$file" "${file%%_h.png}_half.png" ; done
Isso pressupõe que os únicos arquivos no diretório atual que terminam em _h.png
são os que você deseja renomear.
Muito mais especificamente
for file in 0{5..6}_h.png ; do mv "$file" "${file/_h./_half.}" ; done
Presumindo que esses dois exemplos sejam seus únicos. arquivos.
Para o caso geral, a renomeação de arquivos já foi abordada anteriormente .
Use o rename
utilitário escrito em perl. Pode ser que ele não esteja disponível por padrão ...
$ 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
Eu tive uma pergunta semelhante: no manual, ele descreve renomear como
rename [option] expression replacement file
para que você possa usá-lo dessa maneira
rename _h _half *.png
No código: '_h' é a expressão que você está procurando. '_half' é o padrão que você deseja substituir. '* .png' é o intervalo de arquivos que você está procurando pelos possíveis arquivos de destino.
Espero que isso possa ajudar c:
Use o rename
utilitário:
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
Embora o conjunto de respostas esteja completo, preciso adicionar outro ausente.
for i in *_h.png;
do name=`echo "$i" | cut -d'_' -f1`
echo "Executing of name $name"
mv "$i" "${name}_half.png"
done