Saya ingin mengubah ekstensi file dari *.txt
ke *.text
. Saya mencoba menggunakan basename
perintah, tetapi saya mengalami masalah saat mengubah lebih dari satu file.
Ini kode saya:
files=`ls -1 *.txt`
for x in $files
do
mv $x "`basename $files .txt`.text"
done
Saya mendapatkan kesalahan ini:
basename: too many arguments Try basename --help' for more information
Jawaban yang Diterima:
Langsung dari Wiki Greg:
# Rename all *.txt to *.text
for f in *.txt; do
mv -- "$f" "${f%.txt}.text"
done
*.txt
adalah pola globbing, menggunakan *
sebagai wildcard untuk mencocokkan string apa pun. *.txt
cocok dengan semua nama file yang diakhiri dengan '.txt'.
--
menandai akhir dari daftar opsi. Ini menghindari masalah dengan nama file yang dimulai dengan tanda hubung.
${f%.txt}
adalah perluasan parameter, diganti dengan nilai f
variabel dengan .txt
dihapus dari akhir.
Lihat juga entri tentang mengapa Anda tidak boleh mengurai ls
.
Jika Anda harus menggunakan basename
, sintaks Anda adalah:
for f in *.txt; do
mv -- "$f" "$(basename -- "$f" .txt).text"
done