Como encontrar dois tipos de arquivos: executáveis e arquivos de texto

2

Eu gostaria de encontrar dois tipos de arquivos (executáveis e arquivos de texto) e criar links para eles. Minha solução até agora é:

find src -maxdepth 1 -not -type d -executable -exec ln -fs {} . \;; \
find src -name "*.txt" -exec ln -fs {} . \;

A estrutura de diretórios é:

src
src/lapack
src/plasma

Eu gostaria de pegar os executáveis somente dos arquivos src e de texto *.txt dos subdiretórios lapack e plasma .

Eu gostaria de encontrar uma solução mais elegante que combine duas chamadas find em uma. Eu tentei usar o sinalizador -o , mas encontrei problemas com a opção -maxdepth .

Atualização:

O comando combinado que estou tentando é:

find src -maxdepth 1 -not -type d -executable -o -path src -name "*.txt"

Mas ele não seleciona os arquivos de texto nos subdiretórios. Acredito que isso se deva ao -maxdepth 1 flag antes do -o .

    
por mabalenk 09.05.2018 / 14:28

1 resposta

3

Você pode fazer isso com o GNU find ou outro find que suporte -path , mas não acho que seja mais elegante.

find src \( -type f -executable ! -path 'src/*/*' -o -name '*.txt' \) \
     -exec ln -fs {} . +

Você pode usar o zsh no lugar. Seus qualificadores glob são mais concisos do que encontrar a sintaxe.

ln -sf src/*/*(N*.) src/**/*.txt .
    
por 09.05.2018 / 14:42