Jednowarstwowy, który można łatwo pisać bezpośrednio z terminala:
for f in *.md; do mv "$f" "test - $f"; done
Lub przepisane w osobnych wierszach zamiast średników:
for f in *.md
do
mv "$f" "test - $f"
done
Ekspozycja
Składnia for(w sh):
for NAME [in WORDS ... ] ; do COMMANDS; done
Tutaj nasi NAMEis fa nasze WORDSwszystkie są pliki w bieżącym katalogu dopasowywania *.md. Tak więc zmienna $fzostanie podstawiona każdym dopasowaniem pliku *.md.
Więc dla a.md:
mv "$f" "test - $f"
staje się
mv "a.md" "test - a.md"
Cytaty są ważne, ponieważ każda nazwa pliku $fmoże zawierać spacje. W przeciwnym razie mvkażde słowo byłoby osobnym plikiem. Na przykład, jeśli nie było cudzysłowów, a istnieje plik o nazwie Foo Bar.md, oznaczałoby to:
mv Foo Bar.md test - Foo Bar.md
co nie działałoby tak, jak zamierzono. Ale zawijanie $fw cudzysłów ma sens:
mv "Foo Bar.md" "test - Foo Bar.md"
Biorąc pod uwagę składnię for, możesz również zmienić nazwę podzestawu wszystkich *.mdplików, nadając im jawne nazwy:
for f in a.md b.md d.md; do mv "$f" "Test - $f"; done
Lub używając rozszerzenia powłoki:
for f in {a,b,d}.md; do mv "$f" "Test - $f"; done