उपयोग करने का सही तरीका प्रून ढूंढते हैं


1

के रूप में एक ही समस्या का सामना जिस तरह से मुझे लगता है कि उसे ऐसा करना चाहिए, वह 'खोज' क्यों नहीं करता है? ,

किन्तु वह स्वीकार किए जाते हैं जवाब मेरे लिए काम नहीं करता है:

यहाँ मेरी फाइलें हैं:

$ find . 
.
./resources
./resources/sitewide
./resources/sitewide/test.c
./resources/sitewide/.svn
./resources/sitewide/.svn/test.c
./resources/test.c
./resources/.svn
./resources/.svn/test.c
./test.c
./users
./users/avatars
./users/avatars/test.c
./users/avatars/.svn
./users/avatars/.svn/test.c
./users/test.c
./users/.svn
./users/.svn/test.c
./temporary
./temporary/test.c
./temporary/.svn
./temporary/.svn/test.c
./.svn
./.svn/test.c

इसका उपयोग करते समय परिणाम क्या होता है स्वीकृत उत्तर :

$ find -type d -path '.svn' -prune -o -print
.
./resources
./resources/sitewide
./resources/sitewide/test.c
./resources/sitewide/.svn
./resources/sitewide/.svn/test.c
./resources/test.c
./resources/.svn
./resources/.svn/test.c
./test.c
./users
./users/avatars
./users/avatars/test.c
./users/avatars/.svn
./users/avatars/.svn/test.c
./users/test.c
./users/.svn
./users/.svn/test.c
./temporary
./temporary/test.c
./temporary/.svn
./temporary/.svn/test.c
./.svn
./.svn/test.c

स्वीकृत उत्तर के साथ दो समस्याएँ हैं, पहला .svn अभी भी सूचीबद्ध है, और दूसरा, न केवल निर्देशिकाएं बल्कि फाइलें भी सूचीबद्ध हैं।

इन समस्याओं को मैं वास्तव में ठीक कर सकता हूं। लेकिन मेरा सवाल है,

कैसे उन .c फ़ाइलों को खोजने के लिए नहीं .svn निर्देशिकाओं के तहत?

मैंने निम्नलिखित सभी की कोशिश की है, लेकिन मेरे लिए कुछ भी काम नहीं किया है:

 find .  -path '*/.svn' -prune -name "*.c" -print
 find .  -path '*/.svn' -prune -o -name "*.c" -print
 find .  -path '*/.svn' -prune -name "*.c" -o -print
 find .  -path '*/.svn' -prune -a -name "*.c" -print

कृपया मदद कीजिए।

जवाबों:


1

आपकी आज्ञा

find .  -path '*/.svn' -prune -o -name "*.c" -print

वास्तव में काम करना चाहिए, हालांकि आप इसे फिर से लिख सकते हैं

find .  -name .svn -prune -o -name "*.c" -print

अन्यथा आपका पता टूट गया है। मैंने 2 संस्करणों पर प्रयास किया find --version:

find (GNU findutils) 4.5.12
find (GNU findutils) 4.4.2

1
धन्यवाद meuh अधिक क्यू: कमांड जिसे मैंने वास्तव में चलाया था " find . \( -type f -o -type l \) -path '*/.svn' -prune -o -name "*.c" -print ", लेकिन मैं इसे हटाता हूं \( -type f -o -type l \) मेरे सवाल को आसान बनाने के लिए (मैंने भी एक कोशिश की -o से पहले -path )। अब मुझे एहसास हुआ कि यह वह हिस्सा है जो मुझे समस्या दे रहा है। कृपया अपना उत्तर उसमें भी जोड़ें। धन्यवाद।
xpt

1
आह, समझ गया - find . -name .svn -prune -o \( -type f -o -type l \) -name "*.c" -print
xpt

@x खुशी से पाया कि आप जो चाहते थे वह कैसे कर पाए। वाक्य विन्यास काफी दर्दनाक है। मुझे लगता है कि यह उपयोगी है कि वहाँ निहित है -a सभी विकल्पों के बीच और वह तथा की तुलना में तंग बांधता है या
meuh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.