/ Etc'den “a” veya “c” ile başlayan dosyaları listeleme. [kapalı]


10

Denedim ls /etc/[ac]*ama " a " veya " c " ile başlayan dosyaları değil, a veya c ile başlayan dizinleri ve tüm içeriğini gösterir .


dizinler birçok dosya türünden biridir . Ne tür dosyalarla ilgileniyorsunuz (normal, sembolik bağlantı, cihaz, boru, soket ...)?
Stéphane Chazelas

"Directory" ile dizinlerin içeriğinden mi , yoksa dizin adlarından mı bahsedildiğiniz belli değil . Gösterdiğiniz komut, kalıpla eşleşen dizinlerin içeriğini listeler, ls -d /etc/[ac]*sizinle eşleşen dizinlerin içeriğini almazsınız, ancak yine de dizin adlarını görürsünüz. Bunun istediğiniz şey olup olmadığı veya dizin adlarını listelemekten kaçınmak isteyip istemediğiniz belirsizdir.
Kusalananda

Yanıtlar:


23

Dizinlerin listesini listelemekten kaçınmak için şunları yapabilirsiniz:

ls -d /etc/[ac]*

Bu, dizin adlarınıa veya ile başlayan sıradan dosya adlarını listeleyecektir c.

Tamlık için, içermeyen bir çözüm şunlar findolabilir:

ls -ld /etc/[ac]* | grep ^- | tr -s ' ' | cut -d' ' -f9

Soruyu ilk kez okuduğumda da ls -duygun görünüyor, ancak orijinal soru, genişletme veya genişletme ne olursa olsun, hiçbir dizin listelenmeyeceğini belirtiyor gibi görünüyor.
Chris Down

1
ls -ld /etc/[ac]* | grep ^- | tr -s ' ' | cut -d' ' -f9ayrıştırma ls.
Avinash Raj

1
@AvinashRaj: Bu tavsiyenin alaka düzeyi, bir kişinin bu çözüme bir kez mi yoksa sonsuza dek mi çalışması gerektiğine bağlıdır. Sadece bir kez, ayrıştırma lsbence adil bir oyun.
Greg Hewgill

3
Bir anlamı var. Adların /etcaklı başında olması muhtemel olsa da ls, alan sayıları değişeceğinden basit bir alan yaklaşımı kıracaktır. +1 için ls -ldolsa.
terdon

1
Ayrıca locale ( LC_ALL=C) öğesini düzeltmeniz gerekir , tarihin diğer yerel ayarlarda 3 alanı olması garanti edilmez.
Stéphane Chazelas

7

Tekrarlı:

find /etc -type f -name '[ac]*'

Özyinelemeye ihtiyacınız yoksa, bunu taşınabilir bir şekilde yapabilirsiniz:

find /etc/. ! -name . -prune -type f -name '[ac]*'

Veya bu, taşınabilir olmayan bir şekilde (GNU veya yeni bir BSD bulması)

find /etc -type f -maxdepth 1 -name '[ac]*'

Bu durumu duyarsız bir şekilde yapmak istiyorsanız, -inameyerine kullanın -name.


1
Bunun normal dosyalar-type f için olduğunu unutmayın . Bunun yerine dizin olmayan dosyalara ihtiyacınız varsa, ile değiştirin (veya bağlantıları linklere dahil etmek istemiyorsanız GNU ile değiştirin ). ! -type d! -xtype dfind
Stéphane Chazelas

1

Bu komutu da deneyebilirsiniz,

for file in /etc/[ac]*; do echo $file; done | xargs file | awk -v FS=" +" '$2~/directory/ {next;} {print $1}' | sed 's|\/etc\/||g;s/://g'

1

Hem directorys (dizinin içeriği değil) hem de dosya istiyorsanız, printfbultin'i kullanabilirsiniz :

printf "%s\n" [ac]*

Misal:

$ printf "%s\n" [te]*
examples.desktop
teamviewer_linux.deb
test.php
test.txt

Bu, soruda istendiği gibi dizinleri nasıl önleyecektir?
Chris Down

Oh, yanlış okudum. Ben OP istiyorum dizin ama içeriğini değil düşünüyorum.
cuonglm

Bu düzenleme için üzgünüm, tamamen yanlış okudum.
terdon

1

Özyinelemesiz find:

ls -pd /etc/[ac]* | grep -v '/$'

-pBir ekleyen /dizinler için sonunda grepfiltreler. Elbette, yeni satırlar gibi özel karakterler içeren dosya adları için işe yaramaz.


1

İle zsh:

print -rl /etc/[ac]*(.)

Listeye misiniz düzenli (olduğu gibi dosyalar -type fhalinde findsıralanan) /etcadlarına başlar ile aveya c. (xxx)Bir topak sonunda kısmı eleme globbing adı verilen bir zsh özgü bir özelliktir. .bir globbing niteleyicisi normal dosya anlamına gelir .

Glob eşleşmezse zshkomutu iptal eder. Gıdım bile aynı değilse diğer Bourne gibi-kabukları, desen kendisine genişler içinde Not böylece ls -d /etc/[ac]*yanlış adlı bir dosya liste olabilir /etc/[ac]*başlayarak hiçbir dosya varsa aveya ciçinde /etc.

print -rl /etc/[ac]*(^/)

dosyaları listelemek istiyorum değil tipi dizinde ve

print -rl /etc/[ac]*(-^/)

sembolik bağlantıları çözdükten sonra tür dizini olmayan dosyaları listeler.


-3

A ile başlayan görüntü dosyaları için:

ls etc |  grep ^a

C ile başlayan dosyaları görüntülemek için:

ls etc |  grep ^c
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.