Kecualikan folder dengan pola jalur menggunakan perintah FIND pada konsol Ubuntu

0
PROJECTS
   |___ SITE1
   |      |____files (to exclude)
   |      |____img
   |      |____js
   |
   |___ SITE2
   |      |____files (to exclude)
   |      |____img
   |      |____js
   |
   |___ SITE3
          |____files (to exclude)
          |____img
          |____js

Halo, saya ingin mencari SITUS folder x tidak termasuk konten file folder.

Saya mencoba ini tetapi itu menampilkan saya kesalahan izin untuk file ke file folder (jadi sepertinya tidak mengecualikannya):

find . ! -path "*/files/*" -type f -name 'foo'

Ini ditampilkan (Saya di direktori PROYEK):

./SITE1/img/foo.png
./SITE1/js/foo.js
find: `./SITE1/files/201501': Permission denied
find: `./SITE1/files/201412': Permission denied
find: `./SITE1/files/201501': Permission denied
... (the two firsts matches are pretty good, but I break the execution after, it print too many indesirble matches)

Saya terinspirasi oleh tanggapan ini pada askubuntu .

Saya juga mencoba opsi -prune suka dalam contoh ini tanpa menemukan solusi ...


Saya ingin memiliki yang setara dengan pencarian ini dengan egrep tetapi untuk nama file

egrep -Rns --exclude-dir=files 'foo' *

Terima kasih atas bantuan Anda !

onirix
sumber
Kami membutuhkan lebih banyak informasi. Saya tidak tahu apa yang Anda minta. Anda tidak memiliki pertanyaan langsung. Coba tulis lagi sehingga ada pertanyaan spesifik yang Anda tanyakan.
Eric F
1
Kecuali saya salah, yang memungkinkan, pengecualian menyebabkan "hit" tidak ditampilkan, tetapi tidak menghentikan direktori agar tidak dilihat. Dokumentasi (keluaran --help, halaman manual atau sesuatu yang lain) untuk perintah find harus menunjukkan bagaimana perilaku find. Apakah Anda melihat dokumentasi ini?
killermist
Ini sebenarnya sangat mudah dilakukan di Windows 8 ... apakah Anda terjebak find di Linux atau apakah Anda dapat menggunakan Windows untuk ini?
Mokubai
Coba -prune arahan dari find. Saya sarankan Anda mencari contoh (ada beberapa yang bagus di sini di Super User), karena halaman manual dengan sendirinya tidak terlalu menjelaskan tentang cara menggunakan -prune.
G-Man
1
@BroSlow Pada Windows 8 yang Anda lakukan adalah mengklik di dalam kotak pencarian dan ketik -"files" -directory dan itu terjadi persis apa yang diminta tanpa harus terlebih dahulu membuka jendela terminal baru, cd ke direktori, lalu mencari tahu sintaks dari find perintah. Itu *nix tampaknya sangat mirip dengan jalan "panjang". Tetapi saya di sini bukan untuk menginjili, saya hanya ingin melihat apakah ada pilihan lain atau apakah metode lain akan membantu.
Mokubai

Jawaban:

0

OK selesai !

Saya tidak tahu cara menggunakan argumen prune. Ini menanggapi permintaan saya

find * -path "*/files/*" -prune -o -name 'foo' -type f -print

Penjelasan lebih lanjut sini


Di sisi lain saya harus penasaran jika ada sintaks dengan ! (BUKAN) argumen seperti ini contoh di AskUbuntu jika seseorang punya ide.

onirix
sumber
Ya, tapi itu AskUbuntu contoh yang Anda tautkan tidak berhenti find dari terus menelusuri direktori tersebut, sehingga Anda masih akan mendapatkan kesalahan. Sintaks Anda tidak buruk, dan paling buruk tidak pernah lebih lambat (hampir selalu lebih cepat). Meskipun, perhatikan bahwa dengan menggunakan *, dari pada ., Anda kemungkinan menghilangkan dotfile di direktori tingkat atas Anda
BroSlow