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