Estou tentando localizar os arquivos e imprimir SOMENTE o tamanho desses arquivos

2

Estou tentando encontrar os arquivos e imprimir o tamanho desses arquivos

# find . -name "*.req" -size +1000c -mtime +1 -exec 'awk "{print $5}" "{}"' \;

OUTPUT:

find: awk "{print $5}" "./l16696092.req": No such file or directory
find: awk "{print $5}" "./l16696113.req": No such file or directory
find: awk "{print $5}" "./l16696114.req": No such file or directory
find: awk "{print $5}" "./l16696099.req": No such file or directory
find: awk "{print $5}" "./l16696096.req": No such file or directory
find: awk "{print $5}" "./l16696116.req": No such file or directory
find: awk "{print $5}" "./l16696100.req": No such file or directory
find: awk "{print $5}" "./l16696117.req": No such file or directory

Mas os arquivos acima existem nesse local.

# ls -lrt l16696092.req
-rw-r----- 1 applgrnt dba 1595 Sep  5 10:35 l16696092.req
    
por user188779 07.09.2016 / 20:08

5 respostas

5

Outros mostraram como obter os tamanhos dos arquivos, eis a causa do seu erro estranho:

Por causa das aspas simples, esta parte

find ... -exec 'awk "{print $5}" "{}"' \;

fornece find três parâmetros, -exec , ; e o meio que contém awk "{print $5}" "{}" . O {} é substituído pelo nome do arquivo atual, digamos ./l16696092.req , resultando em awk "{print $5}" "./l16696092.req" . Como esse foi o primeiro parâmetro para o -exec , é considerado como o nome do comando para executar espaços, aspas e todos . Daí os erros.

find -exec funciona melhor sem o nível externo de aspas:

find ... -exec awk '{print $5}' {} \;

Mas isso, é claro, executará awk para ler o (conteúdo dos) arquivos encontrados por find , não obter seus tamanhos. (Ainda precisamos citar o $ em $5 com aspas simples ou uma barra invertida, para que o shell não tente expandi-lo.)

    
por 07.09.2016 / 20:24
3

Com o GNU find(1) :

find . -name '*.req' -type f -size +1000c -mtime +1 -printf "%s\n"

Com BSD find(1) e BSD stat(1) :

find . -name '*.req' -type f -size +1000c -mtime +1 -exec stat -f %z {} +
    
por 07.09.2016 / 20:19
2

use a capacidade de find para imprimir:

 $ find . -name "*.req" -size +1000c -mtime +1 -printf "%s\n"

veja man find para uma lista completa de especificadores de formato

    
por 07.09.2016 / 20:16
2

com zsh :

zmodload zsh/stat
zstat -N +size -- **/*(D.L+1000m+1)
    
por 07.09.2016 / 22:34
1

tente

find . -name "*.req" -size +1000c -mtime +1 -exec stat -c %s "{}" \;

ou use find -ls

find . -name "*.req" -size +1000c -mtime +1 -ls | awk ' ... '

(deixei o código do awk aberto, já que agora você sabe como fazer isso funcionar, você terá que descobrir qual campo é o tamanho)

    
por 07.09.2016 / 20:18

Tags