Encontre todos os arquivos com tipo mime específico

0

Copiei um grande número de arquivos (Android SDK) de um diretório compartilhado para o meu sistema. Agora todos os arquivos que seus tipos MIME são application/x-shellscript ou application/x-executable , parecem não ser executáveis. Por exemplo, quando tento executar mksdcard , recebo este erro:

$ ./mksdcard
bash: ./mksdcard: Permission denied

Como posso encontrar apenas arquivos com esses tipos MIME? E então como eu posso mudar essas permissões?

Notas :

1- Quando eu tentei find <path> -type f -executable com como usuário root ele mostra todos os arquivos (mesmo arquivos .PNG) e quando eu tentei isso com o usuário padrão, ele não mostra nada. Eu não sei como filtrar arquivos com atenção ao seu tipo MIME.

2- O diretório de compartilhamento (origem) atualmente não está acessível.

    
por hasanghaforian 28.04.2018 / 20:53

2 respostas

3

O comando find não testa o tipo MIME em si, mas você pode usá-lo para executar o comando mimetype e grep o resultado.

Por exemplo

find path/to/dir/ -type f -exec sh -c '
  for f; do 
    mimetype -b "$f" | grep -Eq "application/(x-shellscript|executable)" && 
    printf "%s\n" "$f"
  done
' sh {} +

Para realizar alguma operação nos arquivos correspondentes (como chmod ou chown ), substitua o comando printf por, por exemplo,

find path/to/dir/ -type f -exec sh -c '
  for f; do 
    mimetype -b "$f" | grep -Eq "application/(x-shellscript|executable)" && 
    chmod u+x "$f"
  done
' sh {} +

Eu altamente recomendo verificar a propriedade atual e as permissões primeiro , por exemplo com ls

find path/to/dir/ -type f -exec sh -c '
  for f; do 
    mimetype -b "$f" | grep -Eq "application/(x-shellscript|executable)" && 
    ls -l "$f"
  done
' sh {} +
    
por steeldriver 28.04.2018 / 22:06
1

Dica:

man cp

Em seguida, pressione / e digite attr (parte dos 'atributos') e pressione ENTER .
Agora, leia as partes do texto que foram marcadas.
Acertar n ou p fará com que o display salte para 'n'ext ou' p'revious instance.

Tentativa de explicar:

Supondo que você ainda tenha os arquivos originais disponíveis, você pode restaurar os atributos de arquivo de seus arquivos copiados usando este argumento para 'cp' (cópia), junto com seus argumentos originais.
  
       --attributes-only
              don't copy the file data, just the attributes

Se eu não estiver totalmente enganado, você obterá as configurações para todos os arquivos mencionados corrigidos por isso.

    
por Hannu 28.04.2018 / 21:09