GNU/Linux >> Belajar Linux >  >> Linux

AWK dan nama file dengan spasi di dalamnya.

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.


Linux
  1. Linux + Bagaimana Cara Mengabaikan (filter) File Dengan Spasi?

  2. Untuk Loop Dengan Nama File?

  3. Mengulangi video dengan gstreamer dan gst-launch?

  1. Temukan file dan direktori di Linux dengan perintah find

  2. Mempertahankan izin file dan folder dengan rsync

  3. dd dengan obs dan seek membuat file dengan ukuran yang tidak terduga

  1. Mengekstrak dan menampilkan data dengan awk

  2. Enkripsi dan dekripsi file menjadi mudah dengan GPG

  3. Enkripsi dan dekripsi file dengan ccrypt