Ini adalah perilaku default dari ls
ls /net/nas/data/languages/pypm/sites/rex/free/2.6/*/pool/v/vi/virtual*1.4.4*pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/linux-x86/pool/v/vi/virtualenv-1.4.4_linux-x86_2.6_1.pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/linux-x86_64/pool/v/vi/virtualenv-1.4.4_linux-x86_64_2.6_1.pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/macosx/pool/v/vi/virtualenv-1.4.4_macosx_2.6_1.pypm
/net/nas/data/languages/pypm/sites/rex/free/2.6/win32-x86/pool/v/vi/virtualenv-1.4.4_win32-x86_2.6_1.pypm
Bagaimana cara saya ls
mencetak hanya nama dasarnya? Suka:
ls $OPTIONS /net/nas/data/languages/pypm/sites/rex/free/2.6/*/pool/v/vi/virtual*1.4.4*pypm
virtualenv-1.4.4_linux-x86_2.6_1.pypm
virtualenv-1.4.4_linux-x86_64_2.6_1.pypm
virtualenv-1.4.4_macosx_2.6_1.pypm
virtualenv-1.4.4_win32-x86_2.6_1.pypm
Catatan : Saya lebih suka shell globbing daripada menggunakan find
sebagai / net / nas / data / bahasa / pypm / situs / rex / gratis berisi sejumlah besar file dan direktori.
linux
command-line
unix
ls
Srid mengatakan Reinstate Monica
sumber
sumber
-maxdepth 1
kefind
.Jawaban:
Sementara
xargs -0
dimaksudkan untuk digunakan untuk input yang dibatasi oleh \ 0 (sepertifind -print0
),ls
tidak memiliki opsi untuk membatasi outputnya dengan cara ini.Namun,
akan melakukan trik untuk mengubah baris baru ke nol di sepanjang jalan. Ini kemudian memungkinkan xargs untuk bekerja dengan nama-nama yang memiliki spasi.
EDIT: ditambahkan
-n 1
ke xargssumber
basename: extra operand
\ 033 [0m / net / nas / data / bahasa / pypm / situs / rex / gratis / 2.6 / macosx / pool / v / vi / virtualenv-1.4.4_macosx_2.6_1.pypm \ 033 [ 0m'`-n 1
saran Anda di tempat lain sebagai pilihanxargs
? (jawaban diedit)-d
(pembatas), Anda dapat melakukannyals ... | xargs -d '\n' -n 1 basename
.Saya menggunakan ini:
Ini memberikan daftar seperti:
sumber
ls -1
(dan pewarnaan dinonaktifkan), seperti yangls
tersirat ketika tidak menulis ke terminal. Sepertinya Anda sedikit kehilangan poinnya, karena masalahnya adalah menelanjangi nama dir saat menentukanls
argumen path menggunakan wild card. Cobals -d "$PWD/"* | tr '\n' '\n'
lihat apa masalah sebenarnya.ls -1
, tetapi juga tidak berfungsi ketika gumpalan telah digunakan, seperti yang ditunjukkan Daniel Beck.ls -1
, dan hanya berfungsi di direktori saat ini, bukan dengan path sepertils path/*
.sumber
awk
larutan:sumber
ls [jalur opsional] | xargs -0 basename
sumber
xargs -0
dicari.Kedua basename GNU dan FreeBSD basename menerima
-a
argumen yang memungkinkan Anda untuk melewati beberapa jalan untuk perintah. Ini bekerja sangat baik dengan shell globbing.sumber
Anda bilang Anda lebih suka globbing
find
, tetapi apakah Anda tahu bahwa keduanya tidak eksklusif? Globbing terjadi pada perintah yang Anda jalankan, bukan hanyals
. Sebagai contoh:Perhatikan bahwa contoh find dapat menggunakan -print0 yang berguna jika path Anda mengandung spasi putih (
tr
solusi berbasis yang disebutkan di tempat lain bekerja sangat baik pada ruang normal, tetapi tidak pada file yang berisi baris baru aktual).Terakhir, jika Anda memiliki akses ke GNU find, Anda juga dapat menggunakan -printf yang menghindari panggilan basename sama sekali:
sumber
-printf
opsi tidak tersedia dalam versi MacOSXfind
.buka direktori tempat Anda memiliki semua file dan ketik.
sumber
find
.find . -name '*pypm'
jika sama sekali ... hanya menempatkan gumpalan di sebelah untuk menemukan tidak mencapai apa-apa - maka Anda hanya bisa menulisls *.pypm
.)