Come cercare file video su Ubuntu?


12

Avevo scaricato un video qualche mese fa. Non ricordo molto bene il nome con cui è stato salvato. Esiste un comando o un metodo che produrrà solo file video in modo che io possa cercare il mio video lì? Dalle pagine man, non sono riuscito a trovare alcuna opzione per trovare quel lavoro.

Il file video che ho scaricato potrebbe avere qualsiasi estensione (come webm ecc.) E potrebbe anche essere possibile che quel tempo abbia cambiato il nome in qualcosa come "abcde" che non ricordo ora. Quindi la ricerca non può essere basata sul nome del file!

(Solo menzionando una somiglianza: in perl ci sono comandi per verificare se un file è un file di testo o binario, ecc. Allo stesso modo potrebbe esserci un modo per verificare se il suo file video o file multimediale)

Risposte:


14

L'idea di base è utilizzare l' utilità file per determinare il tipo di ciascun file e filtrare i file video.

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

Ciò stampa /some/directoryricorsivamente i nomi di tutti i file e le relative sottodirectory il cui tipo MIME è un tipo video.

Il filecomando deve aprire ogni file, che può essere lento. Per accelerare le cose:

  • Limitare il comando agli alberi delle directory in cui è probabile che si trovino, ad esempio /tmp, /var/tmpe alla propria directory home.
  • Limita la ricerca ai file la cui dimensione è nel campo di gioco giusto, ad esempio almeno 10 MB.
  • Limitare la ricerca ai file il cui tempo di modifica è nel campo corretto. Si noti che il download del file potrebbe aver impostato l'ora di modifica sull'ora del download o aver preservato l'ora, a seconda del programma utilizzato per il download (e con quali impostazioni). Puoi anche filtrare il tempo di cambio dell'inode (ctime), ovvero l'ora in cui il file è stato modificato o spostato l'ultima volta (creato, rinominato, ecc.) In qualsiasi modo.

Ecco un esempio che limita il tempo di modifica a essere almeno 60 giorni fa e il tempo di non essere più di 100 giorni fa.

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

Il tuo primo comando recupera molti altri file (diversi dai video). Ad esempio una riga dell'output è: /home/ravbholua/Downloads/Music_Command_line/[SOLVED] a code question regarding music file extensions_files/avatar774785_6.gif: image/jpeg; charset=binary Un'altra riga dell'output è: /home/ravbholua/Free Computer Networking Books Download | Ebooks Online Textbooks.html: text/html; charset=iso-8859-1 Ho bisogno solo dei file video che verranno eseguiti nel lettore vlc, ecc.
Ravi,

@Ravi Avevo accidentalmente lasciato fuori l'opzione per sedescludere le linee non corrispondenti (e anche l'opzione fileper non interrompere le linee nel posto sbagliato), vedi la mia modifica.
Gilles 'SO- smetti di essere malvagio' il

Sì Gilles, è quello che volevo. Ha funzionato magnificamente! Dopo aver eseguito il tuo comando, sono venuto a sapere che il mio sistema ha molti video (alcuni completi e altri incompleti) di cui non ero a conoscenza. Grazie.
Ravi,

1
Questa è la soluzione ideale se i tuoi file video non hanno estensioni prevedibili. Il ricorso a fileè l'unica opzione.
miguelg

13

Ricerca per nome file

Come ha menzionato Chris nella sua risposta, puoi usarlo findper farlo, ma trovo molto più veloce la ricerca nel locatedatabase.

Supponendo che la tua distribuzione fornisca questa funzione, la maggior parte di quelli grandi lo fanno, Ubuntu, Fedora, CentOS, ecc.

Esempio

$ 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

Ricerca per tipo di file

Per trovare i file per tipo è possibile utilizzare il comando fileper ottenere un elenco di informazioni sul tipo di un determinato file.

Ecco un elenco approssimativo di questi tipi di file dal mio sistema, Fedora 19.

  • .mp4: supporti ISO, sistema MPEG v4, versione 1
  • .mkv: file EBML, creatore matroska
  • .wmv: Microsoft ASF
  • .flv: Macromedia Flash Video
  • .webm: WebM
  • .mov: ISO Media, filmato Apple QuickTime
  • .avi: AVI

Puoi usare questo comando per trovare tutti i file nella tua /home/<user>directory.

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

In alternativa puoi usare filee cercare per tipo mime che sono classificati come "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”.

Adattando ciò che abbiamo fatto sopra a qualcosa del genere:

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

Puoi usare sedper ottenere solo i nomi dei file:

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

+1, anche questo, ovviamente, non solo presuppone che locatesia installato, ma che sia stato creato il database.
Chris Down,

Sì, anche il database di solito viene creato ogni notte sulla maggior parte delle distribuzioni, quindi i file aggiunti di recente non saranno nel DB fino a quando il lavoro notturno non verrà eseguito e aggiunto.
slm

1
Si è dimenticato uno dei più comuni, avi.
Faheem Mitha,

6

Dato che ora specifichi che non può essere basato sull'estensione, puoi anche esaminare file(avviso: ciò potrebbe richiedere molto tempo):

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

Se avresti potuto cercare per nome file, supponendo che abbia un'estensione video comune ed è da qualche parte nella tua home directory:

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

Puoi anche usare un regex:

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

Se hai una buona idea di quando l'hai scaricato (e supponendo che mtime fosse impostato su quell'ora), puoi anche provare a restringerlo con l' -mtimeopzione find di GNU .


1
Potresti anche mostrare tutti i file di dimensioni maggiori rispetto ad alcune soglie (supponendo che i file video siano molto grandi) ...
ChuckCottrill

Chris Down, questo modo di usare il nome del file non funzionerà. Ho modificato il mio Q. per favore dai un'occhiata
Ravi

@Ravi Vedi la mia risposta aggiornata, che utilizza i mimetipi.
Chris Down,

Il tuo primo comando sta recuperando anche molti altri file (diversi dai video). Ad esempio, una riga dall'output è: /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 Un'altra riga dall'output è: /home/ravbholua/Downloads/Music_Command_line/command line - how to start a video from the terminal? - Ask Ubuntu.html: text/html; charset=utf-8 Non sta risolvendo il mio scopo.
Ravi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.