Masalahnya di sini adalah parsing dengan ls
. Pertimbangkan untuk melihat di sini:Mengapa Anda tidak mengurai output dari ls.
Alasan mengapa Anda tidak boleh melakukannya adalah karena UNIX mengizinkan hampir semua karakter dalam nama file, termasuk spasi putih, baris baru, koma, simbol pipa, dan hampir semua hal lain yang pernah Anda coba gunakan sebagai pembatas kecuali NUL. Dalam mode defaultnya, jika keluaran standar bukan terminal, ls
memisahkan nama file dengan baris baru. Ini bagus sampai Anda memiliki file dengan baris baru di namanya.
Ya Tuhan, itu mengerikan.
Skrip Anda menggunakan bash; Saya sarankan Anda melakukan ini sebagai gantinya:
#!/bin/bash
for i in *.wav; do mv "${i}" "${i%.wav}.ext"; done
Lihat Panduan Bash untuk detail selengkapnya tentang perluasan parameter.
Anda bisa mencoba ini.
awk '{print substr($0, index($0,$9))}'
Misalnya ini adalah output dari perintah ls:
-rw-r--r--. 1 root root 73834496 6 Des 10:55 File dengan spasi 2
Jika Anda menggunakan awk sederhana seperti ini
# awk '{print $9}'
Ini hanya mengembalikan
# File
Jika digunakan dengan perintah lengkap
# awk '{print substr($0, index($0,$9))}'
Saya mendapatkan seluruh hasilnya
File dengan spasi 2
Heresubstr(s, a, b) :mengembalikan b jumlah karakter dari string s, mulai dari posisi a. Parameter b bersifat opsional.
Misalnya jika kecocokannya adalah addr:192.168.1.133 dan Anda menggunakan substr sebagai berikut
# awk '{print substr($2,6)}'
Anda mendapatkan IP yaitu 192.168.1.133. Perhatikan bahwa 6 adalah karakter yang dimulai dari a di addr
Jadi dalam perintah yang tepat $2 adalah $0 ( yang mencetak seluruh baris.) dan index($0,$9) cocok dengan $9 dan mencetak semuanya sebelum kolom 9. Anda dapat mengubahnya menjadi index($0,$8) dan melihat bahwa hasilnya berubah ke
# 10:55 File with spaces 2
`index(IN, FIND)'Ini mencari string IN untuk kejadian pertama dari stringFIND, dan mengembalikan posisi dalam karakter di mana kejadian itu dimulai dalam string IN.
Saya harap ini membantu. Selain itu, jika Anda menetapkan nilai ini ke variabel dalam skrip, maka Anda harus menyertakan variabel dalam tanda kutip ganda. Jika tidak, Anda akan mendapatkan kesalahan jika Anda melakukan beberapa operasi lain untuk nama file yang diekstrak.