+1 Esta solução funciona mesmo se você tiver espaços no nome do arquivo, mas você quer dizer "$ f" em vez de "f".
Adam Zalcman 8/02
A expansão dos parâmetros do shell é um pouco enigmática; pode-se usar o nome da base: for f in * .JPG; do mv "$ f" "` nome do base $ f .JPG`.jpg "; done
math
@ math: Eu prefiro a minha versão, pois trabalha com nomes de arquivos que contêm espaços em branco e também funcionará /path/to/*.JPG. Você está convidado a apresentar a sua própria resposta, é claro :)
Johnsyweb
É claro que o nome da base removerá os diretórios principais, mas funcionará com espaços dentro dos nomes de arquivos. (Eu não acho que isso vale a pena de uma resposta;) para que eu postei isso como um comentário)
matemática
10
Se você pode usar ferramentas externas (não apenas o bash), verifique o renamecomando!
Seria fácil fazer isso funcionar para arquivos com espaços no nome: basta adicionar aspas duplas ao redor dos dois argumentos mv.
Adam Zalcman 8/02
Eu não tenho espaços. O que eu adiciono para que isso aconteça no diretório CURRENT. No momento em que eu recebo o erro - mv: Can't stat `* .JPG ': Não existe esse arquivo ou diretório
Respostas:
Usando a expansão de parâmetros do shell :
Os
"
personagens cuidam dos nomes de arquivos que contêm espaços, como costumam fazer as fotografias.fonte
/path/to/*.JPG
. Você está convidado a apresentar a sua própria resposta, é claro :)Se você pode usar ferramentas externas (não apenas o bash), verifique o
rename
comando!O
rename
faz parteutil-linux
.fonte
perl
que aceita argumentos diferentes para fazer a mesma coisa.Se você possui espaços nos nomes de arquivos:
fonte
Eu sugeriria dar uma olhada no
mmv
comando. É adequado exatamente para esse tipo de tarefa. No seu cenário, seria:A página de manual está cheia de exemplos, portanto, não leva tempo para se acostumar.
Nos sistemas Debian , pode ser instalado com:
fonte
se você não tiver espaços nos nomes de arquivos:
fonte
mv
.