temukan -maxdepth 0 tidak mengembalikan saya output apa pun


17

Saya mencoba memahami cara menggunakan find -maxdepth 0opsi.

Saya memiliki struktur direktori di bawah ini.

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

Sekarang, saya menjalankan findperintah saya seperti di bawah ini.

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

Dengan tidak ada findperintah di atas , file1 akan dikembalikan.

Dari halaman manual find, saya melihat informasi di bawah ini.

-maxdepth 0 berarti hanya menerapkan tes dan tindakan pada argumen baris perintah.

Saya mencari beberapa contoh dengan -maxdepth 0opsi dan tidak dapat menemukan contoh yang tepat.

findVersi saya adalah,

find --version
find (GNU findutils) 4.4.2

Dapatkah seseorang tolong berikan saya beberapa petunjuk tentang -maxdepth 0opsi kasus mana yang akan berguna?

EDIT

Ketika saya menjalankan perintah di bawah ini, saya mendapatkan file1 terdaftar dua kali. Apakah ini dimaksudkan untuk bekerja seperti ini?

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

Jawaban:


24

Mari kita anggap kita memiliki file1di direktori saat ini. Kemudian:

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

Sekarang, mari kita lihat apa yang dinyatakan oleh dokumentasi:

-maxdepth 0 berarti hanya menerapkan tes dan tindakan pada argumen baris perintah.

Dalam contoh pertama saya di atas, hanya direktori .yang terdaftar di baris perintah. Karena .tidak memiliki nama file1, tidak ada yang tercantum dalam output. Dalam contoh kedua saya di atas, keduanya .dan file1terdaftar pada baris perintah dan, karena file1cocok -name "file1", dikembalikan dalam output

Dengan kata lain, -maxdepth 0berarti jangan tidak mencari direktori atau subdirektori. Alih-alih hanya mencari file yang cocok di antara mereka yang secara eksplisit tercantum pada baris perintah.

Dalam contoh Anda, hanya direktori yang terdaftar di baris perintah dan tidak ada yang disebutkan file1. Karenanya, tidak ada output.

Secara umum, banyak file dan direktori dapat dinamai pada baris perintah. Sebagai contoh, di sini kita mencoba findperintah dengan 11 file dan direktori pada baris perintah:

$ 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

Jalur yang tumpang tindih

Mempertimbangkan:

$ 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

Rupanya, seperti yang ditunjukkan oleh Ramesh, findakan mengikuti setiap jalur yang ditentukan pada baris perintah dan mencari kecocokan bahkan jika jalur mengarah ke file yang sama, seperti di . fileatau bahkan jika jalur tersebut adalah duplikat yang tepat, seperti pada file1 file1.


Terima kasih. Tetapi bagaimana saya bisa memberikan beberapa nama file pada command line?
Ramesh

Poin bagus. Lihat jawaban saya yang diperbarui. Anda dapat memasukkan sebanyak yang Anda inginkan sebelum tes pertama. Sebagai contoh: find * -maxdepth 0 -name "file1". The *akan daftar setiap file dalam direktori saat ini pada baris perintah.
John1024

1
@Ramesh Answer diperbarui lagi dengan, saya harap, penjelasan dan contoh yang lebih baik.
John1024

Terima kasih lagi. Saya memperbarui pertanyaan saya dengan lebih detail dari pembaruan terakhir Anda.
Ramesh

@ Ramesh Saya tidak dapat menemukannya didokumentasikan tetapi saya melihat perilaku yang sama yang Anda lakukan: find melihat setiap jalur pada baris perintah dan melaporkan kecocokan pada masing-masing meskipun mereka adalah duplikat.
John1024
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.