Saya mencoba mendaftar setiap .tar.gz
file, hanya menggunakan perintah berikut:
ls *.tar.gz -l
... Ini menunjukkan kepada saya daftar berikut:
-rw-rw-r-- 1 osm osm 949 Nov 27 16:17 file1.tar.gz
-rw-rw-r-- 1 osm osm 949 Nov 27 16:17 file2.tar.gz
Namun, saya hanya perlu mendaftar dengan cara ini:
file1.tar.gz
file2.tar.gz
dan juga tidak:
file1.tar.gz file2.tar.gz
Bagaimana ini "benar" dilakukan?
ls -1 *.tar.gz
, Tapi apa yang Anda ingin menggunakan daftar untuk ? Jika Anda melakukan sesuatu pada nama file itu, makals
itu bukan cara yang tepat untuk melakukannya. Lihat Mengapa * tidak * parsing `ls` (dan apa yang harus dilakukan)?man ls
. Pastikan font tampilan Anda memiliki kontras yang baik antara 1 (satu) dan l (huruf kecil ell).Jawaban:
The
-1
pilihan (digit “satu”, tidak menurunkan kasus “L”) akan daftar satu file per baris dengan tidak ada informasi lain:sumber
ls -1 *.tar.gz
berfungsi juga.-
..hiddenfile
,benign.php
,evil.bin
,--hide=*evil*
; tanpa--
Anda tidak akan melihatevil.bin
atau--hide=*evil*
.-2
(atau -3 dll)! ;-)columns
!)Jika Anda hanya membutuhkan nama file, Anda dapat menggunakan
printf
:... shell akan memperluas
*.tar.gz
wildcard ke nama file, kemudianprintf
akan mencetaknya, dengan masing-masing diikuti oleh baris baru. Output ini akan sedikit berbeda darils
dalam hal nama file dengan baris baru yang tertanam di dalamnya:mendirikan
ls
printf
sumber
ls -b
,ls -Q
, ls--quoting-style=...
.printf '%q\n'
. (Keduanya GNU.)ls
berperilaku berbeda ketika outputnya disalurkan. Sebagai contoh:Jadi jika Anda ingin melihat semua
*.tar.gz
file Anda , satu per baris, Anda dapat melakukan ini:Tetapi bagaimana jika Anda tidak ingin menyalurkan output Anda? Yaitu, adakah cara untuk memaksa
ls
untuk mengeluarkan nama file satu ke baris tanpa memipis output?Ya, dengan
-1
sakelar. (Itu tanda hubung dengan angka 1.) Jadi, Anda dapat menggunakan perintah ini:sumber
Atau dengan
GNU find
:Sebaliknya
ls
dengan*
itu akan mencari.tar.gz
file secara rekursif:sumber
-printf '%P\n'
alih-alih hanya-print
- pada titik mana Posix yang kompatibelfind
akan bekerja.-print
akan menambahkan./
sebelum nama file.Sebuah sedikit lebih bundaran dan gila cara:
EDIT: menambahkan kutipan untuk menangani nama file aneh
sumber
touch -- '-e \a.tar.gz'
untuk alasan mengutip variabel Anda dan unix.stackexchange.com/q/65803/117549 untuk alasan menggunakan printf alih-alih gema-e \a.tar.gz
file yang dihasilkanrm -- '-e \a.tar.gz'
harus melakukan trik--
berhasilrm
dan banyak orang lain.rm_etc './-x blah'