जवाबों:
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
सूचना! ~ के बजाय ~