/ 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.