find -maxdepth 0 bana herhangi bir çıktı döndürmüyor


18

Ben find -maxdepth 0seçeneği kullanmayı anlamaya çalışıyorum .

Aşağıdaki dizin yapısına sahibim.

--> file1
--> parent
          --> child1
                   --> file1
                   --> file2
          --> child2
                   --> file1
                   --> file2
          --> file1

Şimdi, findkomutumu aşağıdaki gibi yürütüyorum.

find ./parent -maxdepth 0 -name "file1"
find ./ -maxdepth 0 -name "file1"
find . -maxdepth 0 -name "file1"

Yukarıdaki findkomutların hiçbiriyle dosya1 döndürülmez.

Man sayfasından findaşağıdaki bilgileri görüyorum.

-maxdepth 0, testleri ve eylemleri yalnızca komut satırı bağımsız değişkenlerine uygulamak anlamına gelir.

-maxdepth 0Seçenekli bazı örnekler aradım ve uygun bir örnek bulamadım.

Benim findversiyonum,

find --version
find (GNU findutils) 4.4.2

Birisi bana hangi durumlarda -maxdepth 0seçenek yararlı olacağını işaret edebilir misiniz?

DÜZENLE

Aşağıdaki komutu yürüttüğümde, file1'in iki kez listelenmesini alıyorum. Bu, bu şekilde mi çalışacak?

find . file1 -maxdepth 1 -name "file1"
./file1
file1

Yanıtlar:


26

file1Mevcut dizinde bulunduğumuzu varsayalım . Sonra:

$ find . -maxdepth 0 -name "file1"
$ find . file1 -maxdepth 0 -name "file1"
file1

Şimdi, belgelerin neler ifade ettiğine bakalım:

-maxdepth 0, testleri ve eylemleri yalnızca komut satırı bağımsız değişkenlerine uygulamak anlamına gelir.

Yukarıdaki ilk örneğimde ., komut satırında yalnızca dizin listelenir. Yana .adı yok file1, hiçbir şey çıktıda listelenir. Yukarıdaki ikinci örneğimde, hem .ve hem file1de komut satırında listelenmiştir ve file1eşleşmeler nedeniyle -name "file1"çıktıda döndürülmüştür

Diğer bir deyişle, -maxdepth 0araç do not dizinleri veya alt dizinleri arama. Bunun yerine yalnızca komut satırında açıkça listelenenler arasında eşleşen bir dosya arayın.

Örneklerinizde, komut satırında yalnızca dizinler listelenmiş ve hiçbiri adlandırılmamıştır file1. Dolayısıyla çıktı yok.

Genel olarak, birçok dosya ve dizin komut satırında adlandırılabilir. Örneğin, burada findkomut satırında 11 dosya ve dizin içeren bir komut deniyoruz :

$ ls
d1  file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
$ find d1 file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 -maxdepth 0 -name "file1"
file1

Çakışan yollar

Düşünmek:

$ find . file1 -maxdepth 0 -iname file1
file1
$ find . file1 file1 -maxdepth 0 -iname file1
file1
file1
$ find . file1 file1 -maxdepth 1 -iname file1
./file1
file1
file1

Görünüşe göre, Ramesh'in işaret ettiği gibi find, komut satırında belirtilen her yolu izleyecek ve yollar aynı dosyaya yönlendirilse . filebile , ya da yollar tam kopyalar olsa bile eşleşmeleri arayacaktır file1 file1.


Teşekkürler. Ancak bazı dosya adlarını komut satırına nasıl aktarabilirim?
Ramesh

İyi bir nokta. Güncellenmiş cevabımı görün. İlk testten önce istediğiniz kadar koyabilirsiniz. Örneğin: find * -maxdepth 0 -name "file1". *Komut satırında geçerli dizinde her dosya listelenir.
John1024

1
@Ramesh Cevap tekrar, daha iyi bir açıklama ve örnekler ile güncellendi.
John1024

Tekrar teşekkürler. Sorumu en son güncellemenizden daha fazla ayrıntıyla güncelledim.
Ramesh

@Ramesh Belgeli bulamıyorum ama aynı davranış görüyorum: findkomut satırındaki her yola bakar ve yinelenmiş olsalar bile her birinde eşleşmeleri raporlar.
John1024
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.