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é fe nosso WORDSsão todos os arquivos no diretório atual correspondente *.md. Portanto, a variável $fserá 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 $fpode conter espaços. Caso contrário, mvpensaria 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 $faspas, 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 *.mdarquivos 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