Como incluir / excluir muitos arquivos / pastas diferentes usando o terminal

3

Estou fazendo uma pesquisa por arquivos que foram editados no último dia usando a função find . -type f -mtime 0 no terminal. Desejo excluir alguns arquivos e pastas da consulta, como .DS_Store files e .sh files.

Atualmente estou fazendo isso:

find . -type f -not -path "*.DS_Store" -and -not -path "*.sh" -mtime 0

Ainda tenho muitos mais arquivos que desejo excluir, e estou querendo saber se é possível encurtar a expressão. Eu não quero escrever:

-not -path "PathHere" -and -not -path "AnotherPathHere" e assim por diante.

Alguma sugestão?

    
por John 25.11.2015 / 13:01

2 respostas

6

-and é redundante, portanto, você pode simplesmente removê-lo e ! pode ser usado em vez do operador -not não padrão. Você pode usar uma matriz bash para listar a exclusão de uma por linha. Não muito mais curto, mas mais fácil de ler e editar.

filters=(
    ! -name '*.DS_Store'
    ! -name '*.sh'
    ! -name '*.bash'
)

find . -type f \( "${filters[@]}" \) -print

Estendendo o acima para evitar também a queda em determinados diretórios usando -prune :

filters=(
    ! -name '*.DS_Store'
    ! -name '*.sh'
    ! -name '*.bash'
)
prune_dirs=(
       -name '*.tmp'
    -o -name 'tmp'
    -o -name '.Trash*'
)

find . -type d \( "${prune_dirs[@]}" \) -prune -o -type f \( "${filters[@]}" \) -print
    
por geirha 25.11.2015 / 13:08
1

Você pode usar a correspondência padrão de padrões do Bash ou globbing , no comando de localização, você pode usar a opção -iname (que é uma pesquisa de nomes sem distinção entre maiúsculas e minúsculas) e ! como o operador "não", portanto, para o caso que você colocou:

find . -type f \( ! -iname ".DS_Store" ! -iname "*.sh" \) -mtime 0
    
por Arronical 25.11.2015 / 13:11