Tente isso,
find . -newer /tmp/point.start ! -newer /tmp/point.end ! -path . | xargs ls -ltr | sort -nk5 | tail -20
-
xargs
construir e executar linhas de comando a partir da entrada padrão
Estou procurando um comando ou conjunto de comandos do UNIX, pelo qual posso encontrar os 20 maiores arquivos em um diretório, com base em um intervalo de datas específico.
Para fazer isso, achei que poderia definir o período tocando em alguns arquivos e, em seguida, fazendo uma descoberta com base nas datas desses arquivos. ou seja,
touch /tmp/point.start -d "2018-06-01 00:00"
touch /tmp/point.end -d "2018-06-30 00:00"
e, em seguida, execute
find . -newer /tmp/point.start ! -newer /tmp/point.end
E para obter os 20 arquivos mais lentos que eu pretendia executar, no diretório
ls -ltr | sort -nk5 | tail -20
Mas o que não consigo fazer é combinar os dois
find . -newer /tmp/point.start ! -newer /tmp/point.end | ls -ltr | sort -nk5 | tail -20
simplesmente ignora a primeira parte e lista os 20 maiores arquivos no diretório, independentemente do tamanho. Tenho certeza de que é algo muito óbvio que estou perdendo, mas não consigo descobrir o quê!
(Estou no RedHat 5.3 e não tenho acesso ao newermt)
Se você puder usar -printf
com seu find
:
find . -newer /tmp/point.start ! -newer /tmp/point.end -printf '%s %p\n' |
sort -rn | head -20
com zsh
:
autoload age # best in ~/.zshrc if you use that often
ls -ldS -- *(De:age 2018-06-01 2018-06-30:OL[1,20])
-S
: classificar por tamanho. Com o GNU ls
(como encontrado no RedHat 5.3), você pode usar -U
para não classificar como zsh
já classificou a lista com OL
. (...)
: qualificador glob D
: não ignore os arquivos de pontos. e:code:
avalia o código para decidir se deseja selecionar o arquivo age date1 date2
: retorna true para arquivos com mtime nesse intervalo (sem time part, o padrão é 00:00:00) OL
: ordenação inversa por tamanho (tamanho) [1,20]
: selecione apenas os primeiros 20.