मैं उन फ़ाइलों को खोजना चाहता हूं जो किसी अन्य फ़ाइल विस्तार के साथ सह-अस्तित्व में नहीं हैं” यानी सभी .c फ़ाइलें जिनमें संबंधित .o फ़ाइल नहीं है। मैंने find $HOME \( -name '*.c' ! -a -name '*.o' \) की कोशिश की लेकिन यह काम करता है।

0
Loan 22 फरवरी 2019, 11:58

1 उत्तर

सबसे बढ़िया उत्तर

आप निम्न कार्य कर सकते हैं:

  1. सभी फाइलों के नाम खोजें
  2. स्ट्रिप ट्रेलिंग एक्सटेंशन, यदि कोई हो (मान लें कि डॉट का उपयोग केवल एक्सटेंशन से पहले किया जाता है)
  3. समूह डुप्लीकेट के लिए क्रमबद्ध करें
  4. केवल डुप्लिकेट की सूची बनाएं

शेष पंक्तियाँ उन फ़ाइलों को सूचीबद्ध करती हैं जो विभिन्न एक्सटेंशन के साथ होती हैं

 find yourdirectory -type f | sed 's#\..*##' | sort | uniq -d

यदि आप केवल एक्सटेंशन .c और .o में रुचि रखते हैं, तो उसी के अनुसार find को सीमित करें।

find yourdirectory -type f -name '*.c' -or -name '*.o' | sed 's#\..*##' | sort | uniq -d

जैसा कि यह पता चला है, आप वास्तव में जानना चाहते थे (और यह बहुत शुरुआत में आपका प्रश्न होना चाहिए था): ".c फ़ाइलों को कैसे खोजें, जिनमें कोई .o फ़ाइल नहीं है"

find yourdir -name '*.c' | sed 's#..$##' | sort > c-files
find yourdir -name '*.o' | sed 's#..$##' | sort > o-files
diff c-files o-files | grep '^<'

अंतिम grep उन पंक्तियों को फ़िल्टर करेगा जो केवल बाएं फ़ाइलों (c-files) में हैं

3
Frank Neblung 22 फरवरी 2019, 17:59