Bagaimana cara mencari file video di Ubuntu?


12

Saya telah mengunduh video beberapa bulan yang lalu. Saya tidak begitu ingat nama yang menyimpannya. Apakah ada perintah atau metode apa pun yang hanya akan menghasilkan file video sehingga saya dapat mencari video saya di sana? Dari halaman manual, saya tidak dapat menemukan opsi untuk melakukan pekerjaan itu.

File video yang saya unduh mungkin memiliki ekstensi apa pun (seperti webm, dll) dan juga mungkin saya sempat mengubah nama menjadi 'abcde' yang tidak saya ingat sekarang. Jadi pencarian tidak dapat didasarkan pada nama file!

(Hanya menyebutkan satu kesamaan: Dalam perl ada perintah untuk memeriksa apakah file adalah file teks atau biner, dll. Demikian pula mungkin ada cara untuk memeriksa apakah file video atau file multimedia)

Jawaban:


14

Ide dasarnya adalah menggunakan utilitas file untuk menentukan jenis setiap file, dan memfilter pada file video.

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

Ini mencetak nama-nama semua file di dalam /some/directorydan subdirektori secara rekursif yang tipe MIME-nya adalah tipe video.

Itu file perintah perlu membuka setiap file, yang bisa lambat. Untuk mempercepat:

  • Batasi perintah ke pohon direktori di mana itu mungkin, seperti /tmp,/var/tmp dan direktori home Anda.
  • Batasi pencarian untuk file yang ukurannya di ballpark kanan, katakan setidaknya 10MB.
  • Batasi pencarian file yang waktu modifikasinya tepat di ballpark kanan. Perhatikan bahwa mengunduh file mungkin telah menyetel waktu modifikasinya menjadi waktu mengunduh atau mempertahankan waktu, tergantung pada program apa yang Anda gunakan untuk mengunduh (dan dengan pengaturan apa). Anda juga dapat memfilter pada waktu perubahan inode (waktu), yang merupakan waktu file terakhir diubah atau dipindahkan (dibuat, diganti namanya, dll.) Dengan cara apa pun.

Berikut adalah contoh yang membatasi waktu modifikasi setidaknya 60 hari yang lalu dan waktu tidak lebih dari 100 hari yang lalu.

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

Perintah pertama Anda mengambil banyak file lain (selain video). Misalnya satu baris output adalah: /home/ravbholua/Downloads/Music_Command_line/[SOLVED] a code question regarding music file extensions_files/avatar774785_6.gif: image/jpeg; charset=binary Baris output lainnya adalah: /home/ravbholua/Free Computer Networking Books Download | Ebooks Online Textbooks.html: text/html; charset=iso-8859-1 Saya hanya perlu file video yang akan berjalan di vlc player, dll
Ravi

@Ravi Saya tidak sengaja meninggalkan opsi untuk sedmengecualikan baris yang tidak cocok (dan juga opsi fileuntuk tidak memutus baris di tempat yang salah), lihat edit saya.
Gilles 'SANGAT berhenti menjadi jahat'

Ya Gilles, itulah yang saya inginkan. Itu telah bekerja dengan luar biasa! Setelah menjalankan perintah Anda, saya mengetahui bahwa sistem saya memiliki banyak video (beberapa lengkap dan beberapa tidak lengkap) yang tidak saya sadari. Terima kasih.
Ravi

1
Ini adalah solusi ideal jika file video Anda tidak memiliki ekstensi yang dapat diprediksi. Menggunakan fileadalah satu-satunya pilihan.
miguelg

13

Mencari berdasarkan nama file

Seperti yang disebutkan Chris dalam jawabannya, Anda dapat menggunakannya finduntuk melakukan ini, tetapi saya merasa jauh lebih cepat untuk mencari melalui locatedatabase.

Dengan asumsi distro Anda menyediakan fasilitas ini, kebanyakan yang besar melakukannya, Ubuntu, Fedora, CentOS, dll.

Contoh

$ 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

Mencari berdasarkan tipe file

Untuk menemukan file berdasarkan jenis, Anda dapat menggunakan perintah fileuntuk mendapatkan daftar info tentang jenis file tertentu.

Berikut daftar kasar jenis file ini dari sistem saya, Fedora 19.

  • .mp4: ISO Media, sistem MPEG v4, versi 1
  • .mkv: file EBML, pencipta matroska
  • .wmv: Microsoft ASF
  • .flv: Macromedia Flash Video
  • .webm: WebM
  • .mov: ISO Media, film Apple QuickTime
  • .avi: AVI

Anda dapat menggunakan perintah ini untuk menemukan semua file di /home/<user>direktori Anda .

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

Atau Anda dapat menggunakan filedan mencari berdasarkan tipe pantomim yang dikategorikan sebagai "video".

 -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”.

Menyesuaikan apa yang telah kami lakukan di atas dengan sesuatu seperti ini:

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

Anda dapat menggunakan seduntuk mendapatkan hanya nama file:

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

+1, ini juga, tentu saja, tidak hanya mengasumsikan yang locatediinstal, tetapi bahwa database dibangun.
Chris Down

Ya, juga basis data yang biasanya dibuat setiap malam di sebagian besar distro, jadi file yang baru ditambahkan tidak akan ada dalam DB sampai pekerjaan malam telah berjalan dan menambahkannya.
slm

1
Anda lupa salah satu yang paling umum avi,.
Faheem Mitha

6

Karena Anda sekarang menentukan bahwa itu tidak dapat didasarkan pada ekstensi, Anda juga dapat membaca dengan teliti file(peringatan: ini bisa memakan waktu lama):

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

Jika Anda bisa mencari berdasarkan nama file, dengan asumsi bahwa ia memiliki ekstensi video yang umum dan ada di direktori home Anda:

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

Anda juga dapat menggunakan regex:

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

Jika Anda memiliki ide bagus tentang kapan Anda mengunduhnya (dan dengan asumsi mtime disetel ke waktu itu), Anda juga dapat mencoba mempersempitnya dengan -mtimeopsi GNU find .


1
Anda juga dapat menampilkan semua file dengan ukuran lebih besar dari ambang tertentu (dengan asumsi file video sangat besar) ...
ChuckCottrill

Chris Down, cara menggunakan nama file tidak akan berhasil. Saya telah mengedit Q. tolong lihat
Ravi

@Ravi Lihat jawaban saya yang diperbarui, yang menggunakan mimetipe.
Chris Down

Perintah 1 Anda mengambil banyak file (selain video) lainnya. Sebagai contoh, satu baris dari output adalah: /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 Baris lain dari output adalah: /home/ravbholua/Downloads/Music_Command_line/command line - how to start a video from the terminal? - Ask Ubuntu.html: text/html; charset=utf-8 Itu tidak menyelesaikan tujuan saya.
Ravi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.