Sto cercando di capire come utilizzare lopzione find -maxdepth 0
.
Ho la seguente struttura di directory.
--> file1 --> parent --> child1 --> file1 --> file2 --> child2 --> file1 --> file2 --> file1
Ora eseguo il mio comando find
come di seguito.
find ./parent -maxdepth 0 -name "file1" find ./ -maxdepth 0 -name "file1" find . -maxdepth 0 -name "file1"
Senza nessuno dei find
comandi precedenti, file1 viene restituito.
Dalla pagina man di find
, vedo le informazioni seguenti.
-maxdepth 0 significa applicare solo i test e le azioni agli argomenti della riga di comando.
Ho cercato alcuni esempi con lopzione -maxdepth 0
e “non sono riuscito a trovare alcun esempio corretto.
Il mio find
la versione è,
find --version find (GNU findutils) 4.4.2
Qualcuno può fornirmi alcuni suggerimenti su quali casi -maxdepth 0
sarebbe utile ?
EDIT
Quando eseguo il comando seguente, ottengo il file1 elencato due volte. È previsto che funzioni in questo modo?
find . file1 -maxdepth 1 -name "file1" ./file1 file1
Risposta
Supponiamo di avere file1
nella directory corrente. Quindi :
$ find . -maxdepth 0 -name "file1" $ find . file1 -maxdepth 0 -name "file1" file1
Ora, vediamo cosa dice la documentazione:
-maxdepth 0 significa solo y applicare i test e le azioni agli argomenti della riga di comando.
Nel mio primo esempio sopra, solo la directory .
è elencato nella riga di comando. Poiché .
non ha il nome file1
, nelloutput non è elencato nulla. Nel secondo esempio sopra, sia .
e file1
sono elencati nella riga di comando e, perché file1
corrisponde a -name "file1"
, è stato restituito nelloutput
In altre parole, -maxdepth 0
significa fare non cercare directory o sottodirectory. Cerca invece solo un file corrispondente tra quelli esplicitamente elencati sulla riga di comando.
Nei tuoi esempi, solo le directory erano elencate sulla riga di comando e nessuna di esse era denominata file1
. Quindi, nessun output.
In generale, molti file e directory possono essere nominati sulla riga di comando. Ad esempio, qui proviamo un comando find
con 11 file e directory sulla riga di comando:
$ 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
Sovrapposizione percorsi
Considera:
$ 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
Apparentemente, come fa notare Ramesh, find
seguirà ogni percorso specificato sulla riga di comando e cerca corrispondenze anche se i percorsi portano allo stesso file, come in . file
o anche se i percorsi sono duplicati esatti, come in file1 file1
.
Commenti
Rispondi
Se tu desidera trovare file (non directory) in modo non ricorsivo allinterno di una directory usa:
find . -maxdepth 1 -type f -name "file1" # ./file1
-maxdepth 0
non cercherà . Cercherà solo di trovare una corrispondenza tra i nomi di file / directory che hai fornito come argomenti in find
. Per esempio. nellistruzione precedente, utilizzando un valore 0
, cercherebbe di abbinare file1
a .
che non corrisponde. Passando *
invece di .
bash sostituirebbe *
con lelenco dei file nella directory corrente che restituirebbe una corrispondenza.
find * -maxdepth 0 -name "file1"
.*
elencherà tutti i file nella directory corrente sulla riga di comando.find
guarda ciascuna percorso sulla riga di comando e riporta le corrispondenze su ciascuna di esse anche se sono duplicati.