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.