775/664 के अलावा अन्य अनुमतियों के साथ निर्देशिकाएं और फाइलें खोजें


21

मैं एक वेबसाइट से दूसरे सर्वर पर जा रहा हूं और Git मेटाडेटा जैसे फ़ाइल अनुमतियों को संग्रहीत नहीं करता है। मुझे उन निर्देशिकाओं और फाइलों को खोजने की आवश्यकता है जो क्रमशः 775/664 नहीं हैं।

अभी, मैं इस कोब्लेड-एक साथ गर्भनिरोधक का उपयोग कर रहा हूं:

$ find . -type d -exec ls -la {} \; | grep ^d | grep -v ^drwxrwxr-x
$ find . -type f -exec ls -la {} \; | grep -v ^d | grep -v ^-rw-rw-r-- | grep -v '.git'

हालांकि यह काम करता है, मुझे लगता है कि यह हैकसी है। क्या ऐसा करने का एक बेहतर तरीका है, शायद एक कैनोनिकल तरीका है, या मुझे सिर्फ हैक करना चाहिए?

यह हाल ही में Ubuntu संस्करण पर बैश के तहत GNU टूल्स के साथ चल रहा है।

जवाबों:


39

के साथ संयोजन में -permपरीक्षण का उपयोग करें :find-not

find -type d -not -perm 775 -o -type f -not -perm 664
  • -perm 775अनुमतियों के साथ सभी फ़ाइलों से मेल खाता है 775-perm 664के लिए भी यही करता है 664
  • -not (बूलियन नॉट) उस परीक्षण को नकारता है जो निम्न प्रकार से होता है, इसलिए यह इसके विपरीत बिल्कुल मेल खाता है: इस मामले में, उन सभी फाइलों में जिनके पास सही अनुमति नहीं है।
  • -o(बूलियन ओआर) परीक्षणों के दो सेटों को एक साथ जोड़ता है, जब दोनों में से कोई एक करता है: इसकी सबसे कम पूर्वता होती है, इसलिए यह हमारे परीक्षणों को दो अलग-अलग समूहों में विभाजित करता है। आप कोष्ठक का उपयोग अधिक स्पष्ट होने के लिए भी कर सकते हैं । यहां हम उन अनुमतियों के साथ निर्देशिकाओं का मिलान करते हैं जो नहीं हैं 775और साधारण फाइलें उन अनुमतियों के साथ हैं जो नहीं हैं 664

यदि आप निर्देशिका और फ़ाइलों के लिए दो अलग-अलग कमांड चाहते हैं, तो बस इसे आधे पर काटें -oऔर प्रत्येक आधे को अलग से उपयोग करें।


सुन्दर, शुक्रिया! मुझे नहीं पता था कि दो अलग-अलग स्थितियों को सेट किया जा सकता है (उदाहरण के लिए -d और टाइप -f) और न ही मुझे -perm के बारे में पता था।
dotancohen

शायद ध्यान दें कि -notएक POSIX मानक नहीं है; वे !इसके बजाय का उपयोग करें ।
user1404316

2

मुझे नहीं पता कि आपका कोड क्या हासिल करने की कोशिश कर रहा था। आम तौर पर गलत अनुमतियों के साथ फ़ाइलें और निर्देशिकाएँ खोजने का कारण उन्हें बदलने के उद्देश्य से है।

तो यह वही है जो मैं Ubuntu 16.04 में सफलतापूर्वक उपयोग कर रहा हूं

find \! -perm 775 -type d -exec chmod 775 {} \;
find \! -perm 664 -type f -exec chmod 664 {} \;

यह प्रदर्शित करता है! प्रतीक बच गया


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