Doğrudan terminalden kolayca yazılabilen tek astar:
for f in *.md; do mv "$f" "test - $f"; done
Veya noktalı virgül kullanarak ayrı satırlara yeniden yazılmış:
for f in *.md
do
mv "$f" "test - $f"
done
sergi
Sözdizimi for(içinde sh):
for NAME [in WORDS ... ] ; do COMMANDS; done
Burada, bizim NAMEis fve WORDSgeçerli dizin eşleştirme bulunan tüm dosyaları *.md. Böylece değişken $fher dosya eşleştirmesiyle değiştirilecektir *.md.
Yani a.md:
mv "$f" "test - $f"
olur
mv "a.md" "test - a.md"
Her dosya adı $fboşluk içerebileceğinden alıntılar önemlidir . Aksi halde mvher kelimenin ayrı bir dosya olduğunu düşünürdüm. Örneğin, alıntı yoksa ve adı verilen bir dosya varsa Foo Bar.md, şu şekilde çevrilecektir:
mv Foo Bar.md test - Foo Bar.md
kasıtlı olarak işe yaramaz. Ancak $ftırnak işaretleri ile sarmalayarak , şu anlama gelir:
mv "Foo Bar.md" "test - Foo Bar.md"
Sözdizimine dikkat ederek for, *.mdher birini açıkça adlandırarak tüm dosyaların alt kümesini yeniden adlandırabilirsiniz:
for f in a.md b.md d.md; do mv "$f" "Test - $f"; done
Veya kabuk genişletme kullanarak:
for f in {a,b,d}.md; do mv "$f" "Test - $f"; done