Bulma dizinini hariç tut


11

Bir dizini kullanarak, bir desenle eşleşen her dosya ve dizini nasıl bulabilirim find?

Diyelim ki aşağıdaki dosya yapısına sahibim;

.
  foo-dışlamak-me /
    fan.txt
  foo-dışlamak-beni /
    fan.txt
  bar/
    fan.txt
    filanca /
      bar.txt
      foofoo.txt

kullanarak aşağıdaki çıktıyı nasıl alabilirim find:

./bar/foo.txt
./bar/foobar
./bar/foobar/foofoo.txt
./foo-exclude-me-not
./foo-exclude-me-not/foo.txt

Aşağıdaki komutun her ikisini de kullanmayı denedim:

bulmak. -name 'foo-exclude-me' -yaman -o-adı 'foo *'
bulmak. -adı 'foo *' \! -yolu './foo-exclude-me/*'

ama ikisi de bunu döndürüyor:

./bar/foo.txt
./bar/foobar
./bar/foobar/foofoo.txt
./foo-exclude-me # << this should be excluded
./foo-exclude-me-not
./foo-exclude-me-not/foo.txt

foo-exclude-meDizini nasıl düzgün bir şekilde hariç tutabilirim ?


foo-exclude-meBunun yerine kullanmayı deneyin ./foo-exclude-me. Ayrıca -printkomutun sonuna eklemeyi deneyin .
n0pe

@MaxMackie perfect :)
Tyilo

Düzeltildi mi? Sizin için işe yarayan düzeltme hangisiydi? Bir yorum yerine bir cevaba koyabilirim.
n0pe

Her ikisini de kullanarak @MaxMackie -printve foo-exclude-meyerine ./foo-exclude-me.
Tyilo

Harika, Gilles olsa beni dövdü gibi görünüyor :)
n0pe

Yanıtlar:


11
find . -name 'foo-exclude-me' -prune -o -name 'foo*' -print

Hayır ile -print, örtük varsayılan eylem her bu maç için, hatta budanmış olanlar için de geçerlidir. Müstehcen -print, -name 'foo*'yalnızca diğer dalında belirtilen belirtilen koşullar altında geçerlidir -name 'foo-exclude-me'.

Genel olarak konuşursak, -printtahminlerin bir birleşiminden daha karmaşık bir şey yaptığınızda açık bir şekilde kullanın .

İle ikinci denemeniz ! -path './foo-exclude-me/*'işe yaramadı çünkü ./foo-exclude-meeşleşmiyor ./foo-exclude-me/*(iz yok /). Ekleme ! -path ./foo-exclude-meişe yarardı .


-2
-baş-4.1 $ bulmak. -exec ls -l {} + -name 'a.out' -prune -o -name '*' -exec rm -f {} + -exec ls -l {} +

-rw-r - r--. 1 oradba dba 499 18 Oca 19:30 ./a.out
-rw-r - r--. 1 oradba dba 499 18 Ocak 20:59 ./b.out
-rw-r - r--. 1 oradba dba 499 18 Ocak 20:59 ./c.out
-rw-r - r--. 1 oradba dba 499 18 Oca 20:59 ./d.out

.:
toplam 16
-rw-r - r--. 1 oradba dba 499 Oca 18 19:30 a.out
-rw-r - r--. 1 oradba dba 499 Ocak 18 20:59 b.out
-rw-r - r--. 1 oradba dba 499 Ocak 18 20:59 c.out
-rw-r - r--. 1 oradba dba 499 Oca 18 20:59 d.out
rm: `` '' kaldırılamaz.: Bir dizindir
ls: ./b.out dosyasına erişilemiyor: Böyle bir dosya veya dizin yok
ls: ./d.out dosyasına erişilemiyor: Böyle bir dosya veya dizin yok
ls: ./c.out dosyasına erişilemiyor: Böyle bir dosya veya dizin yok
.:
toplam 4
-rw-r - r--. 1 oradba dba 499 Oca 18 19:30 a.out


A.out'u atlamak için iyi erik seçeneğini kullandı ve iyi çalışıyor - art.s
user211226

Kesinlikle neden -pruneilgili olduğunu açıklamıyorsunuz . 'devre dışı -prunebırakılmasına findneden -printolan (varsayılan olarak etkindir) en karmaşık seçeneklerden biridir
grochmal

-doğru Erik; dosya bir dizinse, dosyaya inmeyin. - Dizin olarak koruma altına girmeyecek. - art.s
user211226
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.