Como procurar por arquivos de vídeo no Ubuntu?

12

Eu baixei um vídeo alguns meses atrás. Não estou me lembrando muito bem do nome pelo qual ele é salvo. Existe algum comando ou qualquer método que produza apenas arquivos de vídeo para que eu possa procurar o meu vídeo lá? De man pages, não encontrei nenhuma opção de encontrar esse trabalho.

O arquivo de vídeo que eu baixei pode ter qualquer extensão (como webm etc) e também pode ser possível que eu tenha mudado esse nome para algo como 'abcde' que eu 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)

    
por Ravi 24.12.2013 / 02:44

3 respostas

13

A ideia básica é usar o utilitário arquivo para determinar o tipo de cada arquivo e filtrar em 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 em /some/directory e seus subdiretórios recursivamente, cujo tipo MIME é um tipo de vídeo.

O comando file precisa abrir todos os arquivos, que podem ser lentos. Para acelerar as coisas:

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

Aqui está um exemplo que limita a hora da modificação a pelo menos 60 dias atrás e o ctime a não mais do que 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'
    
por 25.12.2013 / 00:32
13

Pesquisando por nome de arquivo

Como Chris mencionou em sua resposta, você pode usar find para fazer isso, mas acho muito mais rápido pesquisar o banco de dados locate .

Supondo que sua distro forneça esse recurso, a maioria dos grandes, 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 encontrar os arquivos por tipo, você pode usar o comando file para obter uma lista de informações sobre o tipo de um arquivo em particular.

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

  • .mp4: mídia ISO, 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 Apple QuickTime
  • .avi: AVI

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

$ 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 file e pesquisar por tipos mime que são 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”.

Adaptar o que fizemos acima para algo assim:

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

Você pode usar sed para obter apenas os nomes dos arquivos:

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

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

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

Se você pudesse ter pesquisado por nome de arquivo, supondo que ele tenha uma extensão de vídeo comum e esteja em algum lugar em 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 um regex:

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

Se você tem uma boa idéia de quando você fez o download (e assumindo que o mtime foi definido para aquela hora), você também pode tentar reduzi-lo com a opção -mtime do GNU find.

    
por 24.12.2013 / 02:47