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
(em sh
):
for NAME [in WORDS ... ] ; do COMMANDS; done
Aqui, nosso NAME
é f
e nosso WORDS
são todos os arquivos no diretório atual que correspondem a *.md
. Portanto, a variável $f
será substituída por cada arquivo correspondente a *.md
.
Então, para a.md
:
mv "$f" "test - $f"
torna-se
mv "a.md" "test - a.md"
As aspas são importantes porque cada nome de arquivo $f
pode conter espaços. Caso contrário, mv
pensaria que cada palavra era um arquivo separado. Por exemplo, se não houver cotações e houver um arquivo chamado Foo Bar.md
, ele será traduzido como:
mv Foo Bar.md test - Foo Bar.md
que não funcionaria como desejado. Mas ao colocar $f
entre 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 arquivos *.md
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