Snažím se pochopit, jak použít možnost find -maxdepth 0
.
Mám níže uvedenou adresářovou strukturu.
--> file1 --> parent --> child1 --> file1 --> file2 --> child2 --> file1 --> file2 --> file1
Nyní spustím příkaz find
, jak je uvedeno níže.
find ./parent -maxdepth 0 -name "file1" find ./ -maxdepth 0 -name "file1" find . -maxdepth 0 -name "file1"
Bez žádného z výše uvedených find
příkazů file1 se vrátí.
Na stránce manuálu find
vidím níže uvedené informace.
-maxdepth 0 znamená použít testy a akce pouze na argumenty příkazového řádku.
Hledal jsem několik příkladů s možností -maxdepth 0
a nemohl jsem najít žádný vhodný příklad.
Můj find
verze div je,
find --version find (GNU findutils) 4.4.2
Může mi někdo poskytnout nějaké ukazatele, na které případy by byla užitečná možnost -maxdepth 0
?
EDIT
Když spustím níže uvedený příkaz, zobrazí se file1 získání seznamu dvakrát. Je to zamýšleno takhle?
find . file1 -maxdepth 1 -name "file1" ./file1 file1
Odpověď
Předpokládejme, že máme file1
v aktuálním adresáři. :
$ find . -maxdepth 0 -name "file1" $ find . file1 -maxdepth 0 -name "file1" file1
Nyní se podívejme na to, co uvádí dokumentace:
-maxdepth 0 znamená pouze y aplikovat testy a akce na argumenty příkazového řádku.
V mém prvním příkladu výše, pouze adresář .
je uveden na příkazovém řádku. Protože .
nemá název file1
, není ve výstupu nic uvedeno. V mém druhém příkladu výše jsou .
a file1
uvedeny na příkazovém řádku a protože file1
odpovídá -name "file1"
, bylo vráceno ve výstupu
Jinými slovy, -maxdepth 0
znamená do ne hledat adresáře nebo podadresáře. Místo toho hledejte pouze odpovídající soubor mezi soubory výslovně uvedenými na příkazovém řádku.
Ve vašich příkladech byly na příkazovém řádku uvedeny pouze adresáře a žádný z nich nebyl pojmenován file1
. Proto žádný výstup.
Obecně lze na příkazovém řádku pojmenovat mnoho souborů a adresářů. Zde například vyzkoušíme příkaz find
s 11 soubory a adresáři na příkazovém řádku:
$ 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
Překrývající se cesty
Zvažte:
$ 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
Jak Ramesh zdůrazňuje, podle všeho bude následovat find
každá cesta zadaná na příkazovém řádku a hledat shody, i když cesty vedou ke stejnému souboru, jako v . file
, nebo dokonce i v případě, že jsou cesty přesné duplikáty, jako v file1 file1
.
Komentáře
Odpověď
Pokud chcete nerekurzivně najít soubory (nikoli adresáře) v adresáři, použijte:
find . -maxdepth 1 -type f -name "file1" # ./file1
-maxdepth 0
nebude prohledávat . Pokusí se pouze najít shodu mezi názvy souborů / adresářů, které jste zadali jako argumenty v find
. Např. ve výše uvedeném prohlášení by se pomocí hodnoty 0
pokusilo porovnat file1
s .
který neodpovídá. Předáním *
namísto .
by bash nahradil *
seznamem souborů v aktuálním adresáři což by vrátilo shodu.
find * -maxdepth 0 -name "file1"
. V*
bude na příkazovém řádku uveden každý soubor v aktuálním adresáři.find
se podívá na každou cesta na příkazovém řádku a hlásí shody na každém, i když se jedná o duplikáty.