Como procurar arquivos de vídeo no Ubuntu?

12

Eu havia baixado um vídeo alguns meses atrás. Não me lembro muito bem do nome pelo qual ele é salvo. Existe algum comando ou método que produzirá apenas arquivos de vídeo para que eu possa procurar meu vídeo lá? Nas páginas do manual, não encontrei nenhuma opção de encontrar fazendo esse trabalho.

O arquivo de vídeo que baixei pode ter qualquer extensão (como webm etc.) e também pode ser possível que eu tenha mudado o nome para algo como 'abcde', do qual não me lembro agora. Portanto, a pesquisa não pode ser baseada no nome do arquivo!

(Apenas mencionando uma semelhança: no perl, existem comandos para verificar se um arquivo é um arquivo de texto ou binário, etc. Da mesma forma, pode haver uma maneira de verificar se seu arquivo de vídeo ou arquivo multimídia)

Ravi
fonte

Respostas:

14

A idéia básica é usar o utilitário de arquivo para determinar o tipo de cada arquivo e filtrar os arquivos de vídeo.

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

Isso imprime os nomes de todos os arquivos /some/directorye seus subdiretórios recursivamente, cujo tipo MIME é um tipo de vídeo.

O filecomando precisa abrir todos os arquivos, o que pode ser lento. Para acelerar as coisas:

  • Restrinja o comando às árvores de diretórios onde provavelmente está, como /tmp, /var/tmpe ao seu diretório inicial.
  • Restrinja a pesquisa a arquivos cujo tamanho esteja no estádio certo, digamos pelo menos 10 MB.
  • Restrinja a pesquisa a arquivos cujo tempo de modificação esteja no estádio certo. Observe que o download do arquivo pode ter definido o horário da modificação como o horário do download ou preservado o tempo, dependendo do programa usado para baixar (e com quais configurações). Você também pode filtrar o tempo de alteração do inode (ctime), que é o horário em que o arquivo foi modificado ou movido pela última vez (criado, renomeado etc.) de qualquer forma.

Aqui está um exemplo que restringe o tempo de modificação a pelo menos 60 dias atrás e o ctime a não mais de 100 dias atrás.

find /tmp /var/tmp ~ -type f -size +10M \
     -mtime +60 -ctime -100 \
     -exec file -N -i -- {} + |
sed -n 's!: video/[^:]*$!!p'
Gilles 'SO- parar de ser mau'
fonte
Seu primeiro comando busca muitos outros arquivos (exceto vídeos). Por exemplo, uma linha da saída é: /home/ravbholua/Downloads/Music_Command_line/[SOLVED] a code question regarding music file extensions_files/avatar774785_6.gif: image/jpeg; charset=binary Outra linha de saída é: /home/ravbholua/Free Computer Networking Books Download | Ebooks Online Textbooks.html: text/html; charset=iso-8859-1 eu preciso apenas arquivos de vídeo que serão executados no player VLC, etc
Ravi
@ Ravi acidentalmente deixei de fora a opção de sedexcluir linhas não correspondentes (e também a opção filede não quebrar linhas no lugar errado), veja minha edição.
Gilles 'SO- stop be evil'
Sim Gilles, era o que eu queria. Isso funcionou soberbamente! Após executar seu comando, soube que meu sistema possui muitos vídeos (alguns completos e outros incompletos) dos quais eu não estava ciente. Obrigado.
Ravi
1
Esta é a solução ideal se seus arquivos de vídeo não tiverem extensões previsíveis. Recorrer a fileé a única opção.
miguelg
13

Procurando pelo nome do arquivo

Como Chris mencionou em sua resposta, você pode findfazer isso, mas acho muito mais rápido pesquisar no locatebanco de dados.

Assumindo que sua distribuição fornece esse recurso, a maioria dos grandes fornece, Ubuntu, Fedora, CentOS, etc.

Exemplo

$ 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

Pesquisando por tipo de arquivo

Para localizar os arquivos por tipo, você pode usar o comando filepara obter uma lista de informações sobre o tipo de arquivo específico.

Aqui está uma lista aproximada desses tipos de arquivo do meu sistema, o Fedora 19.

  • .mp4: ISO Media, sistema MPEG v4, versão 1
  • .mkv: arquivo EBML, criador matroska
  • .wmv: Microsoft ASF
  • .flv: vídeo em flash da Macromedia
  • .webm: WebM
  • .mov: Mídia ISO, filme do Apple QuickTime
  • .avi: AVI

Você pode usar este comando para encontrar todos os arquivos em seu /home/<user>diretório.

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

Como alternativa, você pode usar filee pesquisar por tipos MIME categorizados como "vídeo".

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

Adaptando o que fizemos acima para algo assim:

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

Você pode usar sedpara obter apenas os nomes de arquivos:

$ find /home/<user> -type f -exec file -i {} + |
    sed -n '/video/s/:[^:]\+$//p'
slm
fonte
+1, isso também, é claro, não apenas pressupõe que locateestá instalado, mas que o banco de dados foi criado.
Chris Baixo
Sim, também, o banco de dados geralmente é criado todas as noites na maioria das distribuições, portanto os arquivos adicionados recentemente não estarão no banco de dados até que o trabalho noturno seja executado e os tenha adicionado.
slm
1
Você esqueceu um dos mais comuns avi.
Faheem Mitha
6

Como agora você especifica que não pode ser baseado na extensão, também pode ler file(aviso: isso pode levar muito tempo):

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

Se você poderia ter pesquisado por nome de arquivo, supondo que ele possua uma extensão de vídeo comum e esteja em algum lugar no seu diretório pessoal:

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

Você também pode usar uma regex:

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

Se você tem uma boa idéia de quando o baixou (e assumindo que o mtime foi definido para esse horário), você também pode tentar reduzi-lo com a -mtimeopção do GNU find .

Chris Down
fonte
1
Você também pode mostrar todos os arquivos maiores em tamanho do que alguns limiar (arquivos de vídeo assumindo são muito grandes) ...
ChuckCottrill
Chris Down, essa maneira de usar o nome do arquivo não funcionará. Eu editei o meu Q. por favor, dê uma olhada
Ravi
@ Ravi Veja minha resposta atualizada, que usa mimetipos.
Chris Baixo
Seu primeiro comando está buscando muitos outros arquivos (exceto vídeos). Por exemplo, uma linha da saída é: /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 Outra linha da saída é: /home/ravbholua/Downloads/Music_Command_line/command line - how to start a video from the terminal? - Ask Ubuntu.html: text/html; charset=utf-8 Não está resolvendo meu objetivo.
Ravi