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
Jika Anda memiliki
prename
...Menggunakan perintah shell biasa:
sumber
prename
?sudo apt-get install
)?mmv
1 , 2 juga merupakan alat yang sangat bagus untuk tugas seperti itu, diterapkan pada pekerjaan saat ini, itu akan menjadiTentu saja, jika Anda hanya ingin menambahkan "test -" ke a.md, b.md dan c.md, tetapi bukan a1.md, sesuatu seperti
akan lebih tepat.
Saya benar-benar dapat menyarankannya, terutama jika Anda memiliki banyak masalah seperti itu.
Jika Anda juga mencari antarmuka grafis, coba gprename .
sumber
Alih-alih menggunakan for for, yang akan gagal pada spasi kecuali Anda mendefinisikan ulang variabel IFS, saya akan merekomendasikan menggunakan loop sementara yang dikombinasikan dengan find. Berikut ini akan berfungsi ketika dijalankan dari direktori yang sama dengan file
baris "basename" ada di sana sehingga find akan mencetak nama file saja - tanpa komponen path yang akan membuat operasi penggantian nama terputus.
sumber
Saya tahu ini benar-benar terlambat, tetapi jika orang lain mencari sesuatu seperti ini, maka ini berhasil bagi saya:
sumber
Jika
zsh
tersedia, Anda dapat menggunakanzmv
:Anda dapat menguji perintah dengan:
-n
berarti dry-run, yaitu hanya menunjukkan apa yang akan terjadi.-w
secara implisit menempatkan tanda kurung di sekitar wildcard, membuat referensi bekerja.sumber
Dalam bash, menambahkan "Teks bergantungan -" ke semua file di folder:
sumber
for i in *; do mv "$i$" "Prepend text - $i"; done