Satu liner yang dapat dengan mudah diketik langsung dari terminal:
for f in *.md; do mv "$f" "test - $f"; done
Atau ditulis ulang pada baris yang terpisah alih-alih menggunakan titik koma:
for f in *.md
do
mv "$f" "test - $f"
done
Eksposisi
Sintaks for
(dalam sh
):
for NAME [in WORDS ... ] ; do COMMANDS; done
Di sini, NAME
is kami f
dan kami WORDS
semua file dalam direktori yang cocok saat ini *.md
. Jadi variabel $f
akan diganti dengan setiap pencocokan file *.md
.
Jadi untuk a.md
:
mv "$f" "test - $f"
menjadi
mv "a.md" "test - a.md"
Kutipan itu penting karena setiap nama file $f
mungkin mengandung spasi. Kalau tidak, mv
akan berpikir setiap kata adalah file yang terpisah. Misalnya, jika tidak ada tanda kutip, dan ada file yang dipanggil Foo Bar.md
, itu akan diterjemahkan sebagai:
mv Foo Bar.md test - Foo Bar.md
yang tidak akan bekerja sesuai keinginan. Tetapi dengan membungkus $f
tanda kutip, masuk akal:
mv "Foo Bar.md" "test - Foo Bar.md"
Memperhatikan sintaks for
, Anda juga bisa mengganti nama subset dari semua *.md
file dengan menamai masing-masing secara eksplisit:
for f in a.md b.md d.md; do mv "$f" "Test - $f"; done
Atau menggunakan ekspansi shell:
for f in {a,b,d}.md; do mv "$f" "Test - $f"; done