Uso de remoção não funcionando no comando find

2

Estou tentando usar o poda como:

find /opt/app/bss/sieb/fs_clone1/userpref -name "*" -type f -mtime -7 -prune

Isso ainda está pesquisando subdiretórios.

    
por NRJ 09.01.2016 / 07:10

2 respostas

2

Ainda está pesquisando os subdiretórios porque você não está usando -prun .

Para -prune a find tree, você deve primeiro combiná-lo.

find / -type d ! -path / -prune -print
/boot
/home
/mnt
/opt
/esp
/dev
/proc
/root
/run
/srv
/sys
/tmp
/usr
/var
/etc

Eu tive que usar -path / porque senão o primeiro diretório encontrado teria sido / da raiz e ele seria -prune 'd então -print ed.

Mas, como você pode ver, são os arquivos correspondidos que são -prune d e nada mais. Então, se você corresponder -type f , você não irá -prune de nenhuma árvore - os arquivos regulares não têm subdiretórios.

Você provavelmente quer algo como:

find /opt/app/bss/sieb/fs_clone1/userpref \
     -path \*path/to/ignore -prune -o     \
   ! -type d -mtime -7

Isso é muito diferente da sua declaração. Em primeiro lugar, -path path/to/ignore não funciona. Ele precisa corresponder a um caminho inteiro , e sua árvore inicial começa com / , mas path/to/ignore não faz nada. Então coloquei * globstar, mas melhor - e provavelmente mais sucinto poderia ser:

cd /opt/app/bss/sieb/fs_clone1/userpref &&
find . -path ./path/to/ignore -prune -o  \
     ! -type d -mtime 7

... o que tornaria sua saída muito menos confusa. De qualquer maneira, no entanto, todos os caminhos correspondidos pelo padrão -path serão -prune 'd então não impressos porque -o de distância para outra instrução e é apenas a última expressão da todo o script find que é impresso automaticamente.

A última parte também é diferente, no entanto. Eu perdi -name '*' porque todos os nomes correspondem a '*' e você pode simplesmente não filtrar isso. E o ! -type d é o que eu acho que muitas pessoas querem dizer quando dizem -type f . O primeiro corresponde a qualquer tipo de arquivo que não seja um diretório - para incluir fifos e sockets e o resto dos estranhos. O último corresponde apenas a arquivos regulares. Talvez você realmente queira o último - mas eu apenas pensei em mencioná-lo.

De qualquer forma, quando tudo estiver dito e feito, o *path/to/ignore é correspondido, podado e não impresso, então, de todo o resto, arquivos que não são do tipo directory e que foram modificados há 7 dias.

    
por 09.01.2016 / 10:59
1
find /opt/app/bss/sieb/fs_clone1/userpref -type f -mtime -7 -path path/to/ignore -prune -o -print

Mas acho que você precisa de -depth .

Observe que −maxdepth 0 significa aplicar apenas os testes e ações aos argumentos da linha de comando. −mindepth 1 significa processar todos os arquivos, exceto os argumentos da linha de comando.

    
por 09.01.2016 / 08:03

Tags