उबंटू पर वीडियो फ़ाइलों की खोज कैसे करें?


12

मैंने कुछ महीने पहले एक वीडियो डाउनलोड किया था। मैं बहुत अच्छी तरह से उस नाम को याद नहीं कर रहा हूँ जिसके द्वारा इसे बचाया गया है। क्या कोई कमांड या कोई विधि है जो केवल वीडियो फ़ाइलों को आउटपुट करेगी ताकि मैं वहां अपने वीडियो की खोज कर सकूं? मैन पेजों से, मुझे उस काम को करने का कोई विकल्प नहीं मिला।

मेरे द्वारा डाउनलोड की गई वीडियो फ़ाइल का कोई भी एक्सटेंशन (जैसे webm आदि) हो सकता है और यह भी संभव हो सकता है कि मेरे पास उस समय का नाम बदलकर 'abcde' जैसी कोई भी चीज़ हो, जो अब मुझे याद नहीं है। इसलिए खोज फ़ाइल के नाम पर आधारित नहीं हो सकती है!

(बस एक समानता का उल्लेख करते हुए: पर्ल में यह जांचने के लिए कमांड होते हैं कि कोई फाइल टेक्स्ट फाइल या बाइनरी है, आदि इसी तरह यह जांचने का कोई तरीका हो सकता है कि इसकी वीडियो फाइल या मल्टीमीडिया फाइल है)

जवाबों:


15

मूल विचार प्रत्येक फ़ाइल के प्रकार को निर्धारित करने के लिए फ़ाइल उपयोगिता का उपयोग करना और वीडियो फ़ाइलों पर फ़िल्टर करना है।

find /some/directory -type f -exec file -N -i -- {} + |
sed -n 's!: video/[^:]*$!!p'

यह सभी फ़ाइलों /some/directoryऔर उसके उपनिर्देशिकाओं के नामों को पुन: प्रिंट करता है जिनका MIME प्रकार एक वीडियो प्रकार है।

fileआदेश हर फ़ाइल है, जो धीमी गति से किया जा सकता है खोलने के लिए की जरूरत है। चीजों को गति देने के लिए:

  • निर्देशिका पेड़ों पर कमांड को सीमित करें जहां यह होने की संभावना है, जैसे कि /tmp, /var/tmpऔर आपके घर की निर्देशिका।
  • उन फ़ाइलों को खोज को प्रतिबंधित करें जिनका आकार सही बॉलपार्क में है, कम से कम 10 एमबी कहें।
  • उन फ़ाइलों को खोज को प्रतिबंधित करें जिनके संशोधन का समय सही बॉलपार्क में है। ध्यान दें कि फ़ाइल को डाउनलोड करने के लिए इसके संशोधन का समय निर्धारित किया जा सकता है या उस समय को संरक्षित किया जा सकता है, जो इस बात पर निर्भर करता है कि आप किस प्रोग्राम को डाउनलोड करते थे (और किन सेटिंग्स के साथ)। आप इनोड चेंज टाइम (ctime) पर भी फ़िल्टर कर सकते हैं, यह वह समय है जब फ़ाइल को किसी भी तरह से अंतिम रूप से संशोधित या इधर-उधर (बनाया, बदला हुआ, इत्यादि) किया गया।

यहां एक उदाहरण दिया गया है जो कम से कम 60 दिन पहले के संशोधन समय को रोकता है और 100 दिन से पहले का समय नहीं है।

find /tmp /var/tmp ~ -type f -size +10M \
     -mtime +60 -ctime -100 \
     -exec file -N -i -- {} + |
sed -n 's!: video/[^:]*$!!p'

आपकी पहली कमांड कई अन्य (वीडियो के अलावा) फाइलें लाती है। उदाहरण के लिए आउटपुट की /home/ravbholua/Downloads/Music_Command_line/[SOLVED] a code question regarding music file extensions_files/avatar774785_6.gif: image/jpeg; charset=binary एक पंक्ति है: आउटपुट की एक और लाइन है: /home/ravbholua/Free Computer Networking Books Download | Ebooks Online Textbooks.html: text/html; charset=iso-8859-1 मुझे केवल वीडियो फ़ाइलों की आवश्यकता है जो vlc प्लेयर में चलेंगी, आदि
रवि

@Ravi मैं गलती sedसे गैर-मिलान लाइनों को बाहर करने का विकल्प छोड़ देता था (और fileगलत स्थान पर लाइनों को नहीं तोड़ने का विकल्प भी ), मेरा संपादन देखें।
गिल्स एसओ- बुराई का होना बंद करें '

हाँ गाइल्स, यही तो मैं चाहता था। जो शानदार काम किया है! आपकी आज्ञा चलाने के बाद, मुझे पता चला है कि मेरे सिस्टम में कई वीडियो (कुछ पूर्ण और कुछ अपूर्ण) हैं, जिनके बारे में मुझे जानकारी नहीं थी। धन्यवाद।
रवि

1
यदि आपकी वीडियो फ़ाइलों में अनुमानित एक्सटेंशन नहीं हैं तो यह आदर्श समाधान है। रिज़ॉर्ट करना fileएकमात्र विकल्प है।
मिगेल

13

फ़ाइल नाम से खोजा जा रहा है

जैसा कि क्रिस ने अपने उत्तर में उल्लेख किया है कि आप ऐसा करने के findलिए उपयोग कर सकते हैं, लेकिन मुझे locateडेटाबेस के माध्यम से खोज करने में बहुत तेज लगता है ।

अपने डिस्ट्रो को मानते हुए यह सुविधा प्रदान करता है, ज्यादातर बड़े लोग करते हैं, उबंटू, फेडोरा, सेंटोस आदि।

उदाहरण

$ locate --basename .mp4 .mkv .wmv .flv .webm .mov .avi | head -5
/home/saml/Desktop/sample_mpeg4.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 1.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 10.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 2.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 3.mp4

फ़ाइल प्रकार द्वारा खोज की जा रही है

किसी प्रकार की फ़ाइलों के fileबारे में जानकारी प्राप्त करने के लिए आप कमांड का उपयोग कर सकते हैं ।

यहाँ मेरे सिस्टम से इन फ़ाइल प्रकारों की एक मोटी सूची है, फेडोरा 19।

  • .mp4: ISO मीडिया, MPEG v4 सिस्टम, संस्करण 1
  • .mkv: ईबीएमएल फ़ाइल, निर्माता मैट्रोस्का
  • .wmv: Microsoft ASF
  • .flv: मैक्रोमेडिया फ्लैश वीडियो
  • .webm: वेबएम
  • .Mov: आईएसओ मीडिया, एप्पल क्विक मूवी
  • .AVI: AVI

आप अपनी /home/<user>निर्देशिका में सभी फ़ाइलों को खोजने के लिए इस कमांड का उपयोग कर सकते हैं ।

$ find /home/<user> -type f -exec file {} + | \
    grep -E "MPEG v4|EBML|\
      Microsoft ASF|Macromedia Flash Video|WebM|Apple QuickTime movie|AVI"

वैकल्पिक रूप से आप file"वीडियो" के रूप में वर्गीकृत किए जाने वाले माइम-प्रकारों का उपयोग और खोज कर सकते हैं ।

 -i, --mime
         Causes the file command to output mime type strings rather than 
         the more traditional human readable ones.  Thus it may say 
         ‘text/plain; charset=us-ascii’ rather than “ASCII text”.

ऊपर हमने जो कुछ किया है उसे इस तरह से अपनाना:

$ find /home/<user> -type f -exec file -i {} + | grep video

आप sedकेवल फ़ाइल नाम प्राप्त करने के लिए उपयोग कर सकते हैं :

$ find /home/<user> -type f -exec file -i {} + |
    sed -n '/video/s/:[^:]\+$//p'

+1, यह भी, ज़ाहिर है, न केवल यह locateमाना जाता है कि इंस्टॉल किया गया है, बल्कि यह कि डेटाबेस बनाया गया है।
क्रिस डाउन

हाँ, डेटाबेस आमतौर पर ज्यादातर डिस्ट्रोस पर रात में निर्मित होता है, इसलिए हाल ही में जोड़ी गई फाइलें तब तक डीबी में नहीं रहेंगी जब तक कि रात की नौकरी नहीं चलती है और उन्हें जोड़ा जाता है।
slm

1
तुम्हें पता है, सबसे आम में से एक भूल गया avi
फहीम मीठा

6

चूँकि अब आप यह निर्दिष्ट करते हैं कि यह विस्तार पर आधारित नहीं हो सकता है, इसलिए आप इसका उपयोग भी कर सकते हैं file(चेतावनी: यह एक लंबा समय लग सकता है):

find ~ -type f -exec file -i {} + | grep video 

यदि आप फ़ाइलनाम द्वारा खोजा जा सकता है, यह मानते हुए कि यह एक सामान्य वीडियो एक्सटेंशन है और यह आपके घर निर्देशिका में कहीं है:

find ~ -type f -name '*.mkv' -o -name '*.mp4' -o -name '*.wmv' -o -name '*.flv' -o -name '*.webm' -o -name '*.mov'

तुम भी एक regex का उपयोग कर सकते हैं:

find ~ -type f -regex '.*\.\(mkv\|mp4\|wmv\|flv\|webm\|mov\)'

यदि आपके पास इसे डाउनलोड करने के बारे में एक अच्छा विचार है (और माइम को उस समय पर सेट किया गया था), तो आप इसे GNU खोज के -mtimeविकल्प के साथ संकीर्ण करने का भी प्रयास कर सकते हैं ।


1
आप सभी फ़ाइलों को कुछ थ्रेशोल्ड से बड़े आकार में दिखा सकते हैं (वीडियो फ़ाइलें बहुत बड़ी हैं) ...
ChuckCottrill

क्रिस डाउन, फ़ाइल नाम का उपयोग करने का यह तरीका काम नहीं करेगा। मैंने अपने Q को संपादित किया है। कृपया एक नज़र डालें
Ravi

@ रावी मेरा अद्यतन उत्तर देखें, जिसमें mimetypes का उपयोग किया गया है।
क्रिस डाउन

आपका पहला आदेश कई अन्य (वीडियो के अलावा) फाइलें भी ला रहा है। उदाहरण के लिए, आउटपुट से एक पंक्ति है: आउटपुट से /home/ravbholua/Downloads/Music_Command_line/Any s_w to cut_add audio files, convert video to audio?_files/post_old.gif: image/gif; charset=binary अन्य पंक्ति है: /home/ravbholua/Downloads/Music_Command_line/command line - how to start a video from the terminal? - Ask Ubuntu.html: text/html; charset=utf-8 यह मेरा उद्देश्य हल नहीं कर रहा है।
रवि
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.