* Bir dizindeki gizli dosyalarla nasıl eşleştirilir


21

Verilen dizinler içindeki gizli dosyalar nasıl eşleştirilir

Örneğin

Aşağıdaki komutu verirsem gizli dosyaların sonucunu vermiyorsa,

 du -b maybehere*/*

kullanmak yerine tek bir komut kullanarak bu basit ulaşmak nasıl

du -b maybehere*/.* maybehere*/*

iki kez maybehere yazmam gerekiyor.


Sadece gizli için deneyin maybehere*/.*ve herkes için yukarıda ekleyin
Costas

1
Düzenlemeniz, Q’u hareketli bir hedef haline getiren ve zaten verilen yanıtları geçersiz kılabilecek ek kısıtlamalarla yeni bir soru soruyor. Bu kötü bir tavır, eğer varsa yeni bir soru sor.
Anthon

Yanıtlar:


22

Destek genişlemesinden yararlanın:

du -b maybehere*/{*,.[^.],.??*}

Veya alternatif olarak

du -b maybehere*/{,.[^.],..?}*

Bunun arkasındaki mantık muhtemelen açık değildir, bu yüzden burada açıklama:

  • * gizli olmayan tüm dosyalarla eşleşir
  • .[^.]isimlerin tek noktadan başlayıp nokta değil başından sonraki dosyaları eşleştirir; ilk formda yalnızca 2 karakterli dosya adlarıdır.
  • .??* en az 3 karakter uzunluğunda gizli dosyalarla eşleşir
  • ..?* yukarıdaki gibi, ancak ikinci karakter bir nokta olmalıdır

Bütün mesele, mevcut ve üst dizine ( .ve ..) sabit bağlantıları hariç tutmak , ancak tüm normal dosyaları, her biri yalnızca bir kez sayılacak şekilde dahil etmektir !

Örneğin en basiti sadece yazmak

du -b maybehere*/{.,}*

Bu, listenin bir nokta .ve "hiçbir şey" (hiçbir şey arasında ,ve kapanması arasında }) içermesi anlamına gelir , böylece tüm gizli dosyalar (bir noktadan başlayan) ve gizli olmayan tüm dosyalar ("hiçbir şey" ile başlayan) eşleşir. Sorun şu ki, bu da eşleşecek .ve ..büyük olasılıkla istediğiniz şey değil, bu yüzden bir şekilde hariç tutmalıyız.


Brace genişlemesi hakkında son söz.

Brace genişletmesi , daha az karakter yazarak komut satırına daha fazla dosya / dizgi / ne ekleyebileceğiniz bir mekanizmadır. Sözdizimi {word1,word2,...}, yani virgülle ayrılmış dizelerden başlayıp {biten bir listedir }. bashmanuel çok temel ve aynı zamanda çok yaygın bir kullanım örneği verir:

$ echo a{b,c,d}e
abe ace ade

kullanımı nedir { }hiçbir fikrim yok :( Bana bu konuda daha fazla bilgi almak için bir yön verebilir
Vidhan

@vidhan düzenlemeye bakın ve man bash"Brace Expansion" bölümüne bakın.
jimmij

yukarıdaki ans için bana biraz daha açık bir açıklama verebilir misiniz bu şeyler ile yeni olduğum gibi her şeyin nasıl çalıştığını açıklamak @jimmij
vidhan

6
.??*eşleşmezse .a, .b... .[^.]*eşleşmez ..foo.
Stéphane Chazelas

4
.foo.[^.]*ve ile eşleşir .??*. Sen istiyorsun {.[!.],..?,}*.
Stéphane Chazelas

14

Zaten GNU'ya özel sözdizimi ( -b) kullandığınız için:

du -abd1 maybehere*/

Bu şekilde, dizinlerdeki dudosyaları listeler maybehere*(ve nokta dosyalarını hariç tutmaz). -d1disk kullanımının raporlanmasını bir seviye aşağıya sınırlar (dizin olmayanlar dahil -a).

Aksi takdirde, globların gizli dosyalar ( .ve hariç ..) içermesi için her kabuğun kendi sözdizimi vardır:

  • zsh:

    du -b maybehere*/*(D)
  • ksh93:

    (FIGNORE='@(.|..)'; du -b maybehere*/*)
  • bash:

    (shopt -s dotglob; du -b maybehere*/*)
  • tcsh:

    (set globdot; du -b maybehere*/*)
  • yash:

    (set -o dot-glob; du -b maybehere*/*)

    gerçi dikkat etmesini sağlar .ve ..sonuçta onları dahil sistemleri üzerinde readdir() zor kullanılabilir.


8

Burada başka bir seçenek daha bulunmaktadır :

du -sm .[!.]* *

Neden başlayarak dosya adlarını atlamak istiyorsunuz ..?
Kusalananda

2
Muhtemelen, çünkü her şeyi listelemek istemiyorlar ../.
Shadur

Bu, örneğin ..myfile; ..?*bunun için ekleyin . Ancak, negatif eşleşmeler için uygun glob sözdizimini kullanmak için +1.
Pedro Gimeno

0

Gizli dizinleri listelemek veya gizli dizinlerde işlemek istiyorsanız Costas'ın dediği gibi

du -b maybehere*/.*

Bu, gizli dosyalar ve dizinler üzerinde çalışmanıza izin verecektir. Yalnızca gizli dizinler istiyorsanız,

du -b maybehere*/.*/


lütfen soruyu bir kez daha görebilir misin @SailorCire Biraz düzenledim
Vidhan

@vidhan sadece bir dizinin içindeki gizli üzerinde çalışmak mı istiyorsunuz? Bu doğru mu?
SailorCire

hayır ben yerine ikisini de kullanarak bir dizin içinde hem gizli olmayan gizli dosyaları eşleştirmek istediğiniz du maybehere*/.*ve maybehere*/*gizlidir biri ve olmayan başka gizli
Vidhan

@vidhan du -bhem gizli hem de gizli olmayanları alır.
SailorCire

no :( ne yazık ki @SailorCire
vidhan

0

Doğrudan kabuk olmasa da, bulmayı bu gibi sınırlı derinlikte kullanabilirsiniz

find maybehere -maxdepth 1 -exec du -sh {} \;
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.