Bagaimana saya bisa mencari file dengan nama dan path sebagian?

64

Seringkali saya memiliki nama file dan sebagian path, misalnya "content / docs / file.xml".

Apakah ada cara sederhana untuk mencari file itu, tanpa memotong bagian-bagian namanya secara manual untuk memberikan nama direktori dan nama file secara terpisah?

Akan lebih bagus jika findbekerja dengan cara itu, jadi saya bisa lari find content/docs/file.xml, tapi sayangnya tidak.

slhck
sumber
1
Anda dapat mencoba menambahkan * wildcard di awal. find -path *content/docs/file.xmlbekerja untukku.
Bob
terima kasih, @ Bob, ini benar-benar bekerja untuk saya. Btw, menarik, bahwa jika saya menambahkan garis miring setelah tanda bintang: "find -path * / content / docs / file.xml", itu tidak berfungsi. Terima kasih banyak.
juga, @ Bob, tolong jadikan itu sebagai jawaban dan saya akan menandainya sebagai yang benar.
Alasan pemotongan setelah tanda bintang tidak berfungsi mungkin karena tanda bintang seharusnya telah lolos, lihat hasil edit untuk jawaban saya.
Bob

Jawaban:

72

Pass di *wildcard untuk mengindikasikan kecocokan untuk apa pun . Anda juga perlu melarikan diri *, misalnya:

find . -path \*content/docs/file.xml

atau lampirkan pola dalam tanda kutip, misalnya:

find . -path "*content/docs/file.xml"

Seperti yang dijelaskan oleh halaman manual:

$ temukan. -nama * .c -cetakan

find: path harus mendahului ekspresi

Ini terjadi karena * .c telah diperluas oleh shell yang mengakibatkan find benar-benar menerima baris perintah seperti ini:

Temukan . -nama bigram.c code.c frcode.c loc.c -print

Perintah itu tentu saja tidak akan berhasil. Alih-alih melakukan hal-hal seperti ini, Anda harus menyertakan pola dalam tanda kutip atau melarikan diri wildcard:

$ temukan. -nama \ * .c -cetak

Bob
sumber
10

find memiliki opsi -wholename juga find $top_dir -wholename *string*

find /usr -wholename *in/abiw*

>/usr/bin/abiword
technosaurus
sumber
Saya tidak tahu jalur lengkapnya, hanya sebagian, jadi "-wamame" tidak akan berfungsi.
bendera menyesatkan, lihat contoh saya ... itu hanya memungkinkan Anda memperluas string ke direktori jika Anda mengetahuinya
technosaurus
3
find . -type f | grep "content/docs/file.xml"

atau hanya

locate content/docs/file.xml
Nifle
sumber
cari adalah opsi yang menarik, tetapi mencari seluruh disk, saya ingin memiliki kemampuan untuk menentukan direktori pencarian dasar atau setidaknya untuk menentukan menggunakan param, bahwa pencarian harus dilakukan dari direktori ini (seperti opsi pertama Anda) , bukan dari root.
1
@ user69817 - sebaliknya, cari tidak mencari disk, itu menginterogasi basis data lokasi, yang biasanya diisi melalui cron sekali sehari.
tink
1

Misalnya mencari file di lokasi menggunakan asterisk / wildcard ( *) sebagai: dir=“/apps/*/instance01/" Anda dapat menggunakan find ${dir} -name “*.jks”. menempatkan semua file dalam array seperti ini:

arr=(`find ${dir} -name “*.jks"`)

jika Anda ingin mendapatkan file dengan ekstensi lain gunakan 'atau' seperti ini:

-name "*.keystore" -o -name "*.jks" -o -name “*.p12" karena -namehanya menerima string tunggal jadi gunakan 'atau'.

Akhirnya letakkan semuanya dalam array seperti ini:

arr=(`find ${dir} -name "*.keystore" -o -name "*.jks" -o -name "*.p12"`)

jika Anda memiliki path lengkap bukan path parsial, lebih mudah untuk menempatkannya dalam array seperti ini:

arr=(“/Users/ajay/Documents/keystore_and_p12files/"*.{keystore,p12,jks})
pengguna450631
sumber