Come posso trovare tutti i file video sul mio sistema?


11

Ho provato a utilizzare la ricerca *.*e il filtro di Unity Lens File per Last Modified = All, Type = Videos e Size = All ma non ho trovato nulla, anche se so che ci sono alcuni file .3gp nella mia cartella Pictures. So di avere numerosi file video su un'altra unità montata anche sul file system. Ho compilato un elenco di probabili estensioni e ho provato numerose iterazioni del findcomando utilizzandole con find ./ -name "* .ext" -o (ecc., Ecc., Fino alla nausea) senza fortuna. Qual'è la soluzione?


Non l'ho provato, ma c'era un articolo su OMG! Ubuntu sull'app di FSearch. Potresti volerlo controllare. omgubuntu.co.uk/2016/10/fsearch-fast-file-search-tool-linux
Jo-Erlend Schinstad

@ Jo-ErlendSchinstad Grazie per il suggerimento, ma poiché sto ottenendo i miei risultati tramite l'interfaccia della riga di comando in meno di 3 secondi, sono soddisfatto di questo approccio. Lo guarderò però. :-)
Elder Geek,

Ma se non capisci il comando, lo dimenticherai. E se avessi capito i comandi, non avresti fatto la domanda. Miglioriamo Ubuntu rendendo le cose più facili per coloro che vogliono solo fare il lavoro. Puoi farlo aggiungendo app o indirizzando le persone verso app già presenti.
Jo-Erlend Schinstad,

@ Jo-ErlendSchinstad Spesso inizio a mancare di comprensione che ottengo tramite la ricerca e l'analisi. Credo che questo approccio sia vitale per lo sviluppo. Il processo di scoperta mi ha portato a una soluzione che ho scelto di condividere qui mentre ho creato uno script e lo ho inserito in ~ / bin che difficilmente dimenticherò e saprò dove cercare se lo faccio. Dal momento che è anche nella mia risposta, chiunque sia motivato può analizzarlo e capirlo.
Elder Geek,

Hai ragione. In realtà non abbiamo bisogno di desktop. Possiamo fare quasi tutto usando le righe di comando. Ma se vogliamo crescere, dobbiamo renderci conto che la maggior parte delle persone non vuole imparare quel tipo di cose. Conosco sviluppatori che non sanno nemmeno descrivere le differenze tra stack e heap.
Jo-Erlend Schinstad,

Risposte:


14

Alternativa: cerca nel file :

sudo find . -type f -exec file -N -i -- {} + | grep video

o se vuoi solo i nomi dei file ...

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

-N, --no-pad: Non riempire i nomi dei file

-i, --mime: Fa sì che il comando file generi output stringhe di tipo mime anziché quelle più tradizionali leggibili dall'uomo. Quindi può dire 'testo / pianura; charset = us-ascii 'piuttosto che' Testo ASCII '. Affinché questa opzione funzioni, il file cambia il modo in cui gestisce i file riconosciuti dal comando stesso (come molti dei tipi di file di testo, directory ecc.) E fa uso di un file "magico" alternativo. (Vedi la sezione FILES, sotto).


La sezione FILES punta a:

File

/usr/share/misc/magic.mgc Elenco compilato predefinito di magia.

/usr/share/misc/magic Directory contenente file magici predefiniti.


file è slowwwwwwwwwwwwwwwww (aprirà tutti i file trova trova) ma ha il vantaggio che non è necessario aggiungere tutte quelle estensioni.


Utilizzando individuare:

locate *.mkv *.webm *.flv *.vob *.ogg *.ogv *.drc *gifv *.mng *.avi$ *.mov *.qt *.wmv *.yuv *.rm *.rmvb *.asf *.amv *.mp4$ *.m4v *.mp *.m?v *.svi *.3gp *.flv *.f4v

Quale "sezione FILES, sotto"
Elder Geek,

aggiunto! era nascosto nella pagina man: D
Rinzwind

È strano, mi sarei aspettato che individuare fosse più veloce, ma con il tuo comando di individuazione ottengo il tempo: 0m8,985s reali e con il mio comando find ottengo il tempo: 0m2.595s reali
Elder Geek

1
Oh ... individuare fa tutti i file. La tua scoperta proviene da dove ti trovi no?
Rinzwind,

Ho aggiunto l'opzione -e che non ha avuto molto impatto ma la restituzione dei risultati per i file che sono già andati non sembra utile. concesso il tempo di sistema è molto più basso per individuare, ma il tempo reale per i risultati è tutto ciò che mi interessa davvero.
Elder Geek,

5

Immagino che questo potrebbe essere fatto come 1-liner ma mi è sembrato un po 'ingombrante, quindi ho creato una sceneggiatura per facilitare l'avvio e la modifica e l'ho chiamato findvids.shQuesto è ciò che ha funzionato per me.

Nota: potrei non aver coperto TUTTI i tipi di file video, ma sono sicuro di averne la maggior parte. Una notevole eccezione è .mkv in quanto questo è il formato di destinazione per il progetto e non ho bisogno di trovare i file che sono già stati elaborati. Dovrebbe essere molto semplice aggiungere ulteriori formati (estensioni) allo script per soddisfare le tue esigenze esaminando il modello e regolando di conseguenza mantenendo le virgolette all'inizio e alla fine dell'espressione. Nota che i file che non hai il permesso di leggere non saranno trovati.

#!/bin/bash
#This script is intended to find virtually all video file formats.
find /. -type f | grep -E "\.webm$|\.flv$|\.vob$|\.ogg$|\.ogv$|\.drc$|\.gifv$|\.mng$|\.avi$|\.mov$|\.qt$|\.wmv$|\.yuv$|\.rm$|\.rmvb$|/.asf$|\.amv$|\.mp4$|\.m4v$|\.mp*$|\.m?v$|\.svi$|\.3gp$|\.flv$|\.f4v$"

Modifica in base a un commento: Il $alla fine degli significa estensione che il termine di ricerca deve essere trovato alla fine della riga. se volessimo corrispondere all'inizio della riga invece utilizzeremmo ^prima del termine che intendiamo corrispondere. Puoi trovare queste ancore spiegate in modo più dettagliato qui.

Ho fatto un confronto di velocità con l'utilizzo di Locate e i risultati sono stati:

time locate *.mkv *.webm *.flv *.vob *.ogg *.ogv *.drc *gifv *.mng *.avi *.mov *.qt *.wmv *.yuv *.rm *.rmvb *.asf *.amv *.mp4$ *.m4v *.mp *.m?v *.svi *.3gp *.flv *.f4v

real    0m8.887s
user    0m5.814s
sys 0m0.052s

vs.

time find /. -type f | grep -E "\.webm$|\.flv$|\.vob$|\.ogg$|\.ogv$|\.drc$|\.gifv$|\.mng$|\.avi$|\.mov$|\.qt$|\.wmv$|\.yuv$|\.rm$|\.rmvb$|/.asf$|\.amv$|\.mp4$|\.m4v$|\.mp4$|\.m?v$|\.svi$|\.3gp$|\.flv$|\.f4v$"

real    0m2.795s
user    0m0.657s
sys 0m1.115s

La ricerca inaspettata è più veloce. Userò questo approccio.

Modifica: ulteriori test indicano che individuare era più veloce su una macchina diversa. Penso che i miei risultati iniziali del test di velocità fossero a castello a causa della memorizzazione nella cache.

fonti:

man find

man grep

/programming/7190565/unix-find-multiple-file-types


touch hello.mp4non crea un file video>: - D e potresti volerlo cambiare locateper velocizzarlo.
Rinzwind,

@Rinzwind Punto valido in merito touchTuttavia, dato che non è stato fatto su questo sistema, in questo caso non è rilevante. Per quanto riguarda la localizzazione, dovrei quindi eseguire updatedbprima di avere i dati attuali, no?
Elder Geek,

Sì, gli aggiornamentib vengono eseguiti ogni giorno, quindi se potessi presumere che non sia necessario durare alcune ore (la velocità che restituisce i risultati è di una magnitudine superiore rispetto a find: D)
Rinzwind

@Rinzwind Mi piacerebbe vedere un esempio funzionante di questo usando Locate.
Elder Geek,

aggiunto un individuare.
Rinzwind,
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.