जवाबों:
find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
काम करेगा। एक और अधिक सुंदर तरीका हो सकता है।
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -exec ls -l {} \;अन्यथा निष्पादन केवल अंतिम भाग ( -iname '*.jpg' इस मामले में) पर लागू होता है ।
find /path/to/ -iname '*.gif' -o -iname '*.jpg' -print0केवल jpg फ़ाइलों को प्रिंट करेगा! आपको यहां कोष्ठक की आवश्यकता है:find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log
-Eकोष्ठक और अपने regex में पाइप से बचने के लिए होने से बचाता है।
-Eविकल्प find"विस्तारित नियमित अभिव्यक्तियों" का उपयोग करने के लिए कहता है। कई अन्य उपकरणों में एक समान विकल्प है, लेकिन मुझे यकीन नहीं है कि यह विकल्प सभी यूनिक्स वितरण पर उपलब्ध है।
find . -regextype posix-extended -regex ".*\.(jpg|gif|png|jpeg)":।
find -E /path/to -iregex ".*\.(jpg|gif|png|jpeg)" > log। -iregexझंडे का उपयोग करना findअसंवेदनशील तरीके से मैच के मामले को बताता है।
find /path/to/ -type f -print0 | xargs -0 file | grep -i image
fileफ़ाइल नाम (या एक्सटेंशन) की परवाह किए बिना, फ़ाइल के प्रकार को पहचानने की कोशिश करने के लिए यह कमांड का उपयोग करता है ।
यदि /path/toया फ़ाइल नाम में स्ट्रिंग है image, तो उपरोक्त फर्जी हिट दे सकता है। उस मामले में, मैं सुझाव दूंगा
cd /path/to
find . -type f -print0 | xargs -0 file --mime-type | grep -i image/
find /path -type f \( -iname "*.jpg" -o -name "*.jpeg" -o -iname "*gif" \)
-iname *.jpg, -o -name *.jpeg, -o -iname *gifसब एक अलग प्रारूप है।
find -regex ".*\.\(jpg\|gif\|png\|jpeg\)"
अगर फाइल में कोई एक्सटेंशन नहीं है तो हम फाइल माइम प्रकार की तलाश कर सकते हैं
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }'
जहाँ (ऑडियो | वीडियो | मैट्रोस्का | एमपीईजी) माइम प्रकार regex हैं
और यदि आप उन्हें हटाना चाहते हैं:
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
rm "$f"
done
या बाकी सब को हटा दें लेकिन उन एक्सटेंशनों को:
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 !~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
rm "$f"
done
सूचना! ~ के बजाय ~