wildcards em executáveis (binários)

1

Posso usar curingas para selecionar determinados tipos de arquivos por suas extensões, por exemplo,

mv *.cc src/

Como selecionar executáveis que não possuem uma extensão?

    
por Viesturs 01.03.2018 / 16:40

2 respostas

3

Isto verifica o bit executável e move todos os arquivos no diretório em que você está em src/ .

find . -maxdepth 1 -type f -perm +a=x -print0 | xargs -0 -I {} mv {} src/

Isto não verifica o nome do arquivo (assim xxxx e xxxx.cc e qualquer outra coisa é movida desde que seja um "arquivo" ( -type f ) a permissão "x" (eXecute) está definida ( -perm +a=x )).

    
por Rinzwind 01.03.2018 / 16:50
1

Bash globs do AFAIK não suportam isso - mas o zsh faz isso através de seus qualifiers glob .

Por exemplo, o qualificador para arquivos simples executáveis é (um pouco confuso) * , por exemplo,

ls -l *(*)

listará binários e scripts executáveis. Ele ainda não fornece um qualificador para arquivos binários explicitamente, mas permite que você defina seus próprios conforme descrito no qualificador do zsh glob para excluir arquivos binários assim, por exemplo, você poderia fazer

mv -- *(*e:'file --brief --mime $REPLY | grep -q binary':) exec/

ou defina uma função auxiliar

binary() { file --brief --mime $REPLY | grep -q binary }

então

mv -- *(*+binary) exec/

(adicionei --brief para evitar possíveis correspondências falsas no nome do arquivo.)

    
por steeldriver 01.03.2018 / 19:17