Jika saya memiliki sekelompok file dengan ekstensi .htm, bagaimana saya bisa mengubah nama semuanya menjadi .html?
mv *.htm *.html
tidak bekerja.
Jika saya memiliki sekelompok file dengan ekstensi .htm, bagaimana saya bisa mengubah nama semuanya menjadi .html?
mv *.htm *.html
tidak bekerja.
Jawaban:
Atau, Anda dapat menggunakan bash murni ... (kecuali untuk mv, yaitu ..)
for file in *.htm; do mv "$file" "${file%.htm}.html"; done
dan hindari hal-hal nama dasar yang tidak menyenangkan ;)
Bash memiliki serangkaian opsi ekspansi variabel yang luas. Yang digunakan di sini, '%', menghapus akhiran pencocokan terkecil dari nilai variabel. Polanya adalah pola gumpal, jadi ${file%.*}
akan juga berfungsi. Operator '%%' menghilangkan akhiran pencocokan terbesar, dan dapat dipertukarkan dalam contoh di atas, karena polanya diperbaiki, ${file%%.*}.html
akan mengubah abhtm menjadi a.html.
Lihat bagian substitusi variabel dari halaman bash untuk trik yang lebih rapi. Ada banyak yang bisa dilakukan dalam bash secara langsung.
Seharusnya tidak ada spasi, baris baru atau spasi putih di nama file, tetapi versi freiheit ini menjawabnya. Itu juga menggunakan $()
bukannya backticks untuk dibaca bersama dengan manfaat lainnya.
for file in *.htm
do
mv "$file" "$(basename "$file" .htm).html"
done
Bahkan lebih baik - untuk kasus khusus dengan menambahkan sampai akhir:
for file in *.htm
do
mv "$file" "${file}l"
done
rename(1)
adalah utilitas Perl yang melakukan persis apa yang Anda inginkan. Pada kasus ini:
rename 's/\.htm$/.html/' *htm
atau jika Anda menggunakan sub direktori juga
(membutuhkan Bash 4.0 dan pengaturan globstar: shopt -s globstar
)
rename 's/\.htm$/.html/' **/*htm
rename
datang dengan perl, dan pada dasarnya setiap unix datang dengan perl hari ini.
shopt -s globstar
(dinonaktifkan secara default). Juga, Linux dan Unix memiliki direktori daripada folder.
for file in *.htm; do
mv $file `basename "$file" .htm`.html
done
Cobalah dengan echo
di depan mv
pertama kali.
Masalah dengan dokumen asli Anda adalah " mv *.htm *.html
" *
s telah ditangani oleh shell, jadi mv
perintahnya hanya melihat daftar semua file .htm dan .html di direktori saat ini. Dengan kata lain, sesuatu seperti " mv foo.htm bar.htm stuff.htm six.htm file.htm
". mv hanya tahu cara menangani lebih dari 2 argumen jika yang terakhir adalah direktori.
mv
tidak berfungsi.
Alat terbaik adalah mmv .
mmv \*.htm #1.html
Contoh lain penggunaan (dan alat lainnya) dalam " Ringkasan Alat Baris Perintah GNU / Linux ".
#
.
Paket util-linux-ng (di Fedora) memiliki rename
perintah yang mirip dengan yang disebutkan oleh TRS-80 . Anda bisa menggunakannya seperti ini:
rename .htm .html *.html
ren *.htm *.html
akan berfungsi di Windows.