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