Як шукати відеофайли на Ubuntu?


12

Я завантажив відео кілька місяців тому. Я не дуже добре пам’ятаю ім’я, завдяки якому воно зберігається. Чи є якась команда чи якийсь метод, який видасть лише відеофайли, щоб я міг шукати своє відео там? На сторінках man, я не міг знайти жодного варіанту, щоб знайти цю роботу.

Завантажений я відео файл може мати будь-яке розширення (наприклад, webm тощо), а також можливо, що я в цей час змінив назву на щось на зразок 'abcde', якого я зараз не пам’ятаю. Тож пошук не може базуватися на назві файлу!

(Зауваживши лише одну схожість. У perl є команди, щоб перевірити, чи є файл текстовим файлом чи двійковим тощо. Так само може бути спосіб перевірити, чи є його відеофайл чи мультимедійний файл)

Відповіді:


15

Основна ідея полягає у використанні утиліти файлів для визначення типу кожного файлу та фільтрації на відеофайли.

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

Це друкує імена всіх файлів у /some/directoryта їхніх підкаталогах рекурсивно, тип MIME - це тип відео.

fileКоманда повинна відкрити кожен файл, який може бути повільним. Щоб пришвидшити справи:

  • Обмежте команду деревами каталогів, де це можливо, наприклад /tmp, /var/tmpі вашим домашнім каталогом.
  • Обмежте пошук файлами, розмір яких знаходиться в правій точці, скажімо, принаймні 10 Мб.
  • Обмежте пошук файлів, час модифікації яких знаходиться у правій смузі. Зауважте, що завантаження файлу, можливо, встановило його час модифікації на час завантаження або зберегло час, залежно від того, яку програму ви використовували для завантаження (і за допомогою яких параметрів). Ви також можете будь-яким способом відфільтрувати час зміни inode (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

@Ravi Я випадково залишив можливість sedвиключити невідповідні лінії (а також можливість fileне ламати рядки в неправильному місці), дивіться мою редагування.
Жил "ТАК - перестань бути злим"

Так, Жил, саме цього я хотів. Це чудово спрацювало! Після виконання вашої команди я дізнався, що в моїй системі є багато відео (деякі повні та деякі неповні), про які я не знав. Дякую.
Раві

1
Це ідеальне рішення, якщо ваші відеофайли не мають передбачуваних розширень. Зберегтись file- це єдиний варіант.
miguelg

13

Пошук за назвою файлу

Як згадував Кріс у своїй відповіді, ви можете використовувати findце, але я знаходжу це набагато швидше для пошуку в locateбазі даних.

Якщо припустити, що ваш дистрибутив забезпечує цей інструмент, більшість великих - Ubuntu, Fedora, CentOS тощо.

Приклад

$ 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щоб отримати список інформації про тип певного файлу.

Ось приблизний список цих типів файлів з моєї системи, Fedora 19.

  • .mp4: ISO Media, система MPEG v4, версія 1
  • .mkv: файл EBML, створювач matroska
  • .wmv: Microsoft ASF
  • .flv: Flash Video Macromedia
  • .webm: WebM
  • .mov: ISO Media, фільм Apple QuickTime
  • .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та шукати за типами mime, які класифікуються як "відео".

 -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.
Faheem Mitha

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'

Ви також можете використовувати регулярний вираз:

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

Якщо у вас є гарна ідея, коли ви завантажували її (і якщо припустити, що mtime встановлений на той час), ви також можете спробувати звузити її за допомогою параметра GNU find -mtime.


1
Ви також можете показати всі файли більшого розміру, ніж деякий поріг (якщо припустити, що відеофайли дуже великі) ...
ChuckCottrill

Кріс Даун, такий спосіб використання імені файлів не буде працювати. Я відредагував свій Q. будь ласка, подивіться
Раві

@Ravi Дивіться мою оновлену відповідь, яка використовує міметики.
Кріс Даун

Ваша перша команда навіть отримує багато інших (крім відео) файлів. Наприклад, один рядок з результату: /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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.