Uma linha que pode ser facilmente digitada diretamente do terminal:
for f in *.md; do mv "$f" "test - $f"; done
Ou reescrito em linhas separadas, usando ponto e vírgula:
for f in *.md
do
mv "$f" "test - $f"
done
Exposição
Sintaxe de for
(in sh
):
for NAME [in WORDS ... ] ; do COMMANDS; done
Aqui, nosso NAME
é f
e nosso WORDS
são todos os arquivos no diretório atual correspondente *.md
. Portanto, a variável $f
será substituída por cada arquivo correspondente *.md
.
Então para a.md
:
mv "$f" "test - $f"
torna-se
mv "a.md" "test - a.md"
As aspas são importantes porque o nome de cada arquivo $f
pode conter espaços. Caso contrário, mv
pensaria que cada palavra era um arquivo separado. Por exemplo, se não houver aspas e houver um arquivo chamado Foo Bar.md
, ele será traduzido como:
mv Foo Bar.md test - Foo Bar.md
o que não funcionaria como pretendido. Mas, ao colocar $f
aspas, faz sentido:
mv "Foo Bar.md" "test - Foo Bar.md"
Observando a sintaxe de for
, você também pode renomear um subconjunto de todos os *.md
arquivos nomeando cada um explicitamente:
for f in a.md b.md d.md; do mv "$f" "Test - $f"; done
Ou usando a expansão do shell:
for f in {a,b,d}.md; do mv "$f" "Test - $f"; done
Se você tem
prename
...Usando comandos comuns do shell:
fonte
prename
?sudo apt-get install
)?mmv
1 , 2 também é uma ferramenta muito boa para essa tarefa, aplicada ao trabalho atual, seriaObviamente, se você quiser adicionar "test -" a a.md, b.md e c.md, mas não a1.md, algo como
seria mais apropriado.
Eu realmente posso sugerir, especialmente se você tiver muitos desses problemas.
Se você estiver procurando adicionalmente por uma interface gráfica, tente gprename .
fonte
Em vez de usar um loop for, que falhará em espaços, a menos que você redefina a variável IFS, eu recomendaria o uso de um loop while combinado com find. O seguinte funcionará quando executado no mesmo diretório que os arquivos
a linha "basename" está lá para que o find imprima apenas o nome do arquivo - sem componentes de caminho que fariam a operação de renomeação ser interrompida.
fonte
Eu sei que é muito tarde, mas se alguém mais estiver procurando por algo assim, isso funcionou para mim:
fonte
Se você tiver
zsh
disponível, poderá usarzmv
:Você pode testar o comando com:
-n
significa funcionamento a seco, ou seja, apenas mostra o que vai acontecer.-w
coloca implicitamente parênteses em caracteres curinga, faz com que as referências anteriores funcionem.fonte
No bash, adicione "Anexar texto -" a todos os arquivos na pasta:
fonte
for i in *; do mv "$i$" "Prepend text - $i"; done