Saya harus menggemakan hanya nama file atau direktori dengan konstruksi ini:
ls -Al | while read string
do
...
done
ls -Al
keluaran:
drwxr-xr-x 12 s162103 studs 12 march 28 12:49 personal domain
drwxr-xr-x 2 s162103 studs 3 march 28 22:32 public_html
drwxr-xr-x 7 s162103 studs 8 march 28 13:59 WebApplication1
Sebagai contoh jika saya mencoba:
ls -Al | while read string
do
echo "$string" | awk '{print $9}
done
kemudian hanya output file dan direktori tanpa spasi. Jika file atau direktori memiliki ruang seperti "domain pribadi" itu hanya akan menjadi kata "pribadi".
Saya butuh solusi yang sangat sederhana. Mungkin ada solusi yang lebih baik daripada awk.
linux
command-line
ls
Alex Zern
sumber
sumber
ls -Al *' '*
?ls
Hasil parsing tidak pernah menghasilkan sesuatu yang baik.ls -Al | while
. Cara yang sederhana dan lebih dapat diandalkan adalahfor string in *; do echo "$string"; done
.ls
? Parsingls
dan "bekerja di semua * nix dan tidak akan pecah jika sesuatu terjadi" tidak berjalan dengan baik.Jawaban:
Anda seharusnya tidak melewatkan output dari
ls
. Jika ini adalah pekerjaan rumah dan Anda harus, profesor Anda tidak tahu apa yang mereka bicarakan. Mengapa Anda tidak melakukan hal seperti ini:Yang baik...
atau
...keburukan...
Jika Anda benar-benar ingin menggunakannya
ls
, Anda bisa membuatnya sedikit lebih kuat dengan melakukan sesuatu seperti ini:... dan yang jelek
Jika Anda bersikeras melakukannya dengan cara yang salah, berbahaya, dan hanya perlu menggunakan
while
loop, lakukan ini:Serius, tapi jangan.
sumber
drwx------ 2 s162103 studs 3 oct. 9 2012 .ssh drwxr-xr-x 3 s162103 studs 6 oct. 25 09:02 .subversion drwxrwxrwt 3 s162103 studs 3 nov. 15 2012 .TempoItems
kadang-kadang saya dapat kencan tanpa waktu, hanya setahun dan gawk kembali kosongls
.-l
saklar? Jika semua yang Anda inginkan adalah nama file, jalankan sajals -A
. Menggunakan-l
hanya membuat hidup Anda lebih sulit karena Anda sekarang harus mengurai hasilnya.ls
bukan cara terbaik untuk mendapatkan apa yang Anda butuhkan. Mengapa Anda tidak memposting pertanyaan baru yang menjelaskan informasi yang ingin Anda kumpulkan dan kami dapat menyarankan cara untuk melakukannya. Atau, Anda dapat menggunakan skrip Anda apa adanya, dan menggunakan salah satu saran di atas untuk mencetak nama saja. Tapi serius, jangan parsels
, katakan saja apa yang Anda coba lakukan pada pertanyaan baru.Apakah ada alasan bahwa
ls -A1
* tidak akan berfungsi?Misalnya:
* Catatan: itu huruf kapital A dan nomor satu.
sumber
Saya heran mengapa tidak ada yang menyebutkan perintah sederhana ini:
sumber
sort
Adakah ide bagaimana perpipaan menyebabkan blok multi-kolom menjadi tidak diproteksi menjadi satu kolom?ls
kembali kels -1
(output columnd tunggal) ketika outputnya tidak pergi ke terminal (dan menonaktifkan kutipan / penggantian karakter yang tidak dapat dicetak; @ Kusalananda, Andals
tidak mematuhi POSIX jika masih melakukannya).ls
output sudah diurutkan. Jadi perpipaan untuk yangsort
terbaik tidak akan melakukan apa-apa, dan lebih buruk lagi memotong-motong output (jika nama file berisi karakter baris baru) atau gagal untuk nama file yang bukan teks.ls -a | cat
akan lebih baik. Atau bahkan lebih baikls -A1
seperti yang telah disebutkan (dan karena Anda biasanya ingin penggantian / penawaran ketika ditampilkan pada terminal)ls
berperilaku berbeda ketika output bukan terminal.Anda tidak dapat mem-parsing keluaran
ls
, apalagils -l
karena baris baru, sama seperti spasi karakter yang valid dalam nama file. Selain itu, Anda harus mempertimbangkan symlink yang memiliki output seperti... foo -> bar
.Mengapa Anda
-l
tetap menggunakan jika Anda hanya ingin nama file?Kerjakan saja:
Jika Anda ingin memasukkan file dot (kecuali
.
dan..
), tergantung pada shell:zsh
:bash
:ksh93
:POSIXly:
sumber
Bagaimana tentang:
sumber
kompres beberapa spasi menjadi spasi tunggal dengan tr maka Anda dapat menggunakan cut untuk membagi bidang
sumber
Coba (
bash
,zsh
,ksh93
sintaks):Lihat juga:
ls
? di unix SEsumber
coba
ls -1
Thats Integer 1Dari halaman manual.
sumber
ini menampilkan file apa di bawah direktori apa.
sumber