Saya ingin mengulang setiap baris dalam output dari: ls -l /some/dir/*
Saat ini saya sedang mencoba: for x in $(ls -l $1); do echo $x; done
Namun, ini mengulangi setiap elemen di baris secara terpisah, jadi saya mendapatkan:
-r--r-----
1
ivanevf
eng
1074
Apr
22
13:07
File1
-r--r-----
1
ivanevf
eng
1074
Apr
22
13:17
File2
Tapi saya ingin mengulang setiap baris secara keseluruhan. Bagaimana aku melakukan itu?
Jawaban:
Setel IFS ke baris baru, seperti ini:
Letakkan sub-shell di sekitarnya jika Anda tidak ingin mengatur IFS secara permanen:
Atau gunakan saat | baca saja:
Satu opsi lagi, yang menjalankan while / read pada level shell yang sama:
sumber
read -r
atau bash akan menghapus garis miring terbalik yang tidak terhindarkan dari data.Itu tergantung apa yang ingin Anda lakukan dengan setiap baris. awk adalah utilitas yang berguna untuk jenis pemrosesan ini. Contoh:
.. di sistem saya mencetak nama dan ukuran setiap item dalam direktori.
sumber
Seperti yang telah disebutkan, awk adalah alat yang tepat untuk ini. Jika Anda tidak ingin menggunakan awk, alih-alih mem-parsing keluaran "ls -l" baris demi baris, Anda dapat mengulangi semua file dan melakukan "ls -l" untuk setiap file seperti ini:
sumber
Anda juga dapat mencoba
find
perintah tersebut. Jika Anda hanya ingin file di direktori saat ini:Jalankan perintah pada masing-masing?
Hitung baris, tetapi hanya dalam file?
sumber
Utilitas read (1) bersama dengan pengalihan keluaran dari perintah ls (1) akan melakukan apa yang Anda inginkan.
sumber
Jadi, mengapa tidak ada yang menyarankan hanya menggunakan opsi yang menghilangkan bagian yang tidak ingin dia proses.
Di Debian modern, Anda cukup mendapatkan file Anda dengan:
Lebih jauh lagi, Anda tidak perlu memperhatikan direktori tempat Anda menjalankannya jika Anda menggunakan direktori lengkap:
Perintah terakhir ini saya gunakan di atas dan saya mendapatkan output berikut:
sumber