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 NAME
is f
a nasze WORDS
wszystkie są pliki w bieżącym katalogu dopasowywania *.md
. Tak więc zmienna $f
zostanie 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 $f
może zawierać spacje. W przeciwnym razie mv
każ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 $f
w 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 *.md
plikó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