Excluir do caractere curinga (*) usando find

2

Eu tenho um comando no bashscript que vai encontrar os arquivos de um nome de pasta curinga e contá-lo a partir dessa pasta curinga que temos uma pasta de teste que eu quero excluir da contagem.

Aqui está o meu comando

echo $(date "+%b %_d")
echo "$today"
sr_today=$(find /mnt/data/project_data/web_collab/mailbox/*/sr_pdf/*.pdf -type f -ls | grep "$today" | wc -l)

Na pasta da caixa de correio, há pastas nomeadas
000000
111111
222222 e 333333 e so on...

Desejo excluir 000000 desse comando find . Isso é possível? Alguma dica?

Obrigado.

    
por Edmhar 21.07.2016 / 05:47

2 respostas

1

Primeiro, se você estiver usando um caminho longo como esse, é melhor fornecer seu próprio nome de variável. Torna o código mais fácil de ler, garante que você use o mesmo nome em todos os lugares, sem erros de digitação, e facilita a alteração, se necessário.

MAILBOX=/mnt/data/project_data/web_collab/mailbox

Tente isso se houver menos do que algumas centenas de arquivos pdf para lidar com:

echo "${MAILBOX}"/*/sr_pdf/*.pdf | grep -v /00000/ | grep "$today" | wc -l

E se você quiser uma solução mais geral, faça o seguinte:

find "${MAILBOX}" -path '*/sr_pdf/*.pdf' | grep -v /00000/ | grep "$today" | wc -l
    
por 21.07.2016 / 06:03
5

Usando o GNU find :

#!/bin/sh

dir='/mnt/data/project_data/web_collab/mailbox/'

sr_today=$(find "$dir" \
             ! -path '*/000000/*' \
             -newermt '12am today' \
             -ipath '*/sr_pdf/*.pdf' |
           wc -l)
  • A opção find do GNU -newermt compreende os mesmos formatos de data que o GNU date -d e touch -d . Veja man find e procure por -newerXY para detalhes.

  • o predicado final -ipath não faz distinção entre maiúsculas e minúsculas, portanto, ele corresponderá a * .PDF, * .pDf, etc. Infelizmente, também não diferencia maiúsculas de minúsculas ao corresponder ao diretório sr_pdf. Se houver, por exemplo, subdiretórios SR_PDF que você não deseja corresponder e tiver certeza de que todas as extensões de arquivo .pdf estão em minúsculas, altere -ipath para -path .

    Ou, para correspondência de arquivo sr_pdf de correspondência de caminho e diferencia maiúsculas de minúsculas *.pdf , substitua essa linha -ipath por:

      -path '*/sr_pdf/*' \
      -iname '*.pdf' | 
    
por 21.07.2016 / 10:10

Tags