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 NAME
is f
ve WORDS
geçerli dizin eşleştirme bulunan tüm dosyaları *.md
. Böylece değişken $f
her 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ı $f
boşluk içerebileceğinden alıntılar önemlidir . Aksi halde mv
her 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 $f
tırnak işaretleri ile sarmalayarak , şu anlama gelir:
mv "Foo Bar.md" "test - Foo Bar.md"
Sözdizimine dikkat ederek for
, *.md
her 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