Sadece temel dosya adını yazdırmasını söyle


21

Bu, varsayılan davranışıdır. 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

lsYalnızca temel adı nasıl yazdırabilirim? Sevmek:

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

Not : find/ net / nas / data / diller / pypm / sites / rex / free gibi çok sayıda dosya ve dizin içeriyor.


1
Eğer dizin çok sayıda dosya içerdiğinde find kullanarak OVER kabuk globbing tercih? typo ??
akira

1
Ben OP bir alt dizin listeleme istemediğini tahmin ve geçme seçeneği farkında değildir ediyorum -maxdepth 1için find.
intuited

Yanıtlar:


19

Birlikte xargs -0(gibi \ 0 ile sınırlanan girişi için kullanılabilir amaçlanmıştır find -print0), lsbu şekilde de çıkış sınırlandırmak için böyle bir seçenek vardır.

Ancak,

ls -1 /path/glob | tr '\n' '\0' | xargs -0 -n 1 basename

yeni satırları yol boyunca boş değerlere dönüştürmek için hile yapar. Bu, xargs öğesinin boşluk içeren adlarla çalışmasına izin verir.

EDIT: -n 1xargs'e eklendi


Bu benim için çalışmaz: basename: extra operand \ 033 [0m / net / nas / data / diller / pypm / siteler / rex / free / 2.6 / macosx / pool / v / vi / virtualenv-1.4.4_macosx_2.6_1.pypm \ 033 [ 0m ''
Srid, Reinstate Monica

@Sridhar: -n 1Başka bir yerde bir seçenek olarak önerdiğin şeye ihtiyacın olabilir xargsmi? (cevap düzenlendi)
Steve Folly

Her ne kadar şahsen kendi cevabımı tercih etsem de (dosya adlarındaki boşluklarla neredeyse hiç uğraşmam gerektiğinden), bunu boşlukları da ele aldığı için işaretleyeceğim.
Srid diyor Reinstate Monica

Xargs'ın mac sürümü -d(ayırıcı) seçeneğini destekliyorsa , bunu yapabilirsiniz ls ... | xargs -d '\n' -n 1 basename.
intuited

12

Bunu kullanıyorum:

ls | tr '\n' '\n'

Şuna benzer bir liste verir:

file1.mp3
file2.mp3
file3.mp3
...

3
Bu, bir terminale yazılmadığında da olduğu gibi ls -1(ve renklendirme devre dışı) ile aynıdır ls. Sorun, lsjoker karakterler kullanarak yol bağımsız değişkenleri belirterek dir adı soymaktan sıyrılıyor gibi, noktayı biraz eksik gibi görünüyor . ls -d "$PWD/"* | tr '\n' '\n'Asıl sorunun ne olduğunu görmeye çalışın .
Daniel Beck

-1 - insanların bu cevabı neden desteklediğinden emin değilim. Sadece ls -1Beck ile aynı şeyi yapmakla kalmaz, aynı zamanda globlar kullanıldığında da çalışmaz, Daniel Beck'in işaret ettiği gibi.
slhck

-1 - Bu, aynıdır ls -1ve yalnızca geçerli dizinde çalışır, gibi bir yolla çalışmaz ls path/*.
Brendan Byrd


4

awk çözüm:

ls -1 /path/glob | awk -F'/' '{print $NF}'

2

ls [isteğe bağlı yol] | xargs -0 taban adı


2
-1: ls xargs -0, aradıkları şey \ 0 ile sınırlandırılamıyor .
Steve Folly


1

Globbing yapmayı tercih ettiğini söyledin find, ama ikisinin birbirini dışlamadığını biliyor muydun? Globbing, sadece çalıştırdığınız herhangi bir komutta gerçekleşir ls. Örneğin:

$ export BASE=/net/nas/data/languages/pypm/sites/rex/free/2.6

$ echo $BASE/*/pool/v/vi/virtual*1.4.4*pypm | xargs basename
$ ls $BASE/*/pool/v/vi/virtual*1.4.4*pypm | xargs basename
$ find $BASE/*/pool/v/vi/virtual*1.4.4*pypm -print0 | xargs -0 basename

Bulma örneğinin, yollarınız beyaz boşluk içeriyorsa -print0 işlevini kullanabileceğine dikkat edin ( trbaşka bir yerde belirtilen tabanlı çözümler normal alanlarda harika çalışır, ancak gerçek satır satırları içeren dosyalarda işe yaramaz).

Son olarak, GNU bulmaya erişiminiz varsa, temel ad çağrısını tamamen önleyen -printf komutunu da kullanabilirsiniz:

$ find $BASE/*/pool/v/vi/virtual*1.4.4*pypm -printf '%f\n'

Ne yazık ki, -printfseçenek MacOSX sürümünde mevcut değildir find.
Srid, Reinstate Monica'yı

İyi karar; gözetim için özür dilerim. Cevabı güncelledim.
Ryan Bright

-3

tüm dosyalarınızın ve dizininizin bulunduğu dizine gidin.

find *.pypm

1
OP açıkça kullanmak istemediğini açıkladı find.
gronostaj

1
Ayrıca, bu OP'nin ihtiyacı olan şeyi bile yapmaz. (Not: Hiç kullanmamanız gerekir find . -name '*pypm'... sadece ls *.pypm
küreyi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.