Unix / Linux bulurken ararken gizli dosyaları dışla?


35

findGizli dosyaları dışlamak için hangi seçenekleri kullanmam gerekir ?


4
Bir yana: Bu görev için özel bir desteğin bulunmamasının nedeni, öncü olarak adlandırılan dosyalar hakkında özel olan tek şey. lsözel olarak talep edilmedikçe listelenmemiş olmaları: her bakımdan tamamen sıradan dosyalar, sadece lsvarsayılan olarak onları görmezden gelmenize izin veriyor.
dmckee

2
Soru: Gibi bir şey gizlemek ister misiniz .hidden/visible.txt?
Keith Thompson,

Yanıtlar:


14

Bunu burada buldum :

find . \( ! -regex '.*/\..*' \) -type f -name "whatever"

Neden sadece değil \( ! -name '.*' \)?
yerçekimi

@grawity Ben sadece buldum, tamamen nasıl çalıştığını bilmiyorum. Siz sadece gizli dosyaları değil, gizli dizinleri ve tüm alt içerikleri ve gizli dosyaları da alt klasörlerde gizler mi?
Jarvin

5
Hayır, olmaz: / Ama \( ! -path '*/.*' \)olur.
Grawity

@grawity Ya, sanırım OP'nin ne istediğiyle ilgili bir varsayımda bulundum ... İsim çözümünüz muhtemelen istediklerine en yakın olanı.
Jarvin

@ grawity & Dan: Öyle değil mi (! -path '^. *') ?? Çözümleriniz '.' olan herhangi bir dosyayı yok sayar. a.exe, b.out vb. gibi dosya adının herhangi bir yerinde ....
Software Mechanic

13

Olumsuzluk glob modelinin iyi bilinmediği görülüyor. Yani kullanabilirsiniz:

find . -name "[!.]*"

12

Bu, sorunuzu cevaplamıyor, ancak gizli olmayan dosyaları bulma görevi için, tüm dosyaları bulabilmeyi ve sonra grep ile filtrelemeyi seviyorum.

find . -type f | grep -v '/\.'

Yaklaşımınıza benzer ancak belki biraz daha basit.


Bu benim için çalışan tek gömleklerden biriydi.
entpnerd

7

Aşağıdaki findkullanımı deneyin :

find . -type f -not -path '*/\.*'

Hangi tüm gizli dosyaları görmezden gelir (bir nokta ile başlayan dosya ve dizinler).


1

findnhBelli başlı vakaları web'de bulabildiğim bu sorunun cevaplarından daha iyi ele aldığına inandığım bir senaryo yazdım .

#!/bin/bash

declare -a paths

while [ $# -ne 0 ]; do
  case "$1" in -*) break ;; esac
  paths+=("$1")
  shift
done

find "${paths[@]}" \( -name . -o -name .. -o \! \( -name '.*' -prune \) \) "$@"

Örneğin, içinin nasıl bir komutla bir açıkça belirtilen gizli dizinin olmayan gizli dosyaları ve dizinleri bulabilirsiniz findnh ~/.hiddendir/gösterecektir, ~/.hiddendir/fileancak ~/.hiddendir/.superhiddenfile.


1
Güzel kodlama. Dışında, denediğimde findnh ~/.hiddendir/hiçbir şey alamadım. Bundan başka, bunun nasıl ! -path '*/.*'ve find … | grep -v '/\.'?
G-Man

1

Eğer yönelik bir çalışma niteliğindedir ise findve grep, ripgrepvarsayılan örn tarafından gizli dosyaları hariç yapar

rg --files

--files Aranacak her dosyayı gerçekte arama yapmadan yazdırın.


1

fd

Kullanımı fdbasit, çok daha hızlı ve kullanıcı dostu bir alternatif find. Varsayılan olarak:

  • Varsayılan olarak, gizli dizinleri ve dosyaları yok sayar.
  • .gitignoreVarsayılan olarak, 'daki kalıpları yok sayar .

Benchmark analizini kontrol edin .


1

Gizli dosyaları bulmak için:

find -name '[.]*'

Görünür dosyaları bulmak için:

find -name '[!.]*'

Bu kadar basit.

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.