Tenho certeza de que você precisará declarar todos os arquivos no diretório para determinar quais são os 500 mais novos.
ls -t
| head -n 500
Estou procurando um script de shell de linha única ou um comando unix para encontrar os 500 arquivos mais recentes em um diretório. Grandes restrições devem ser a reclamação POSIX e o diretório pode ter toneladas de arquivos.
Tenho certeza de que você precisará declarar todos os arquivos no diretório para determinar quais são os 500 mais novos.
ls -t
| head -n 500
Se você quer dizer arquivos no diretório e todos os seus subdiretórios, algo como
find . -exec sh -c \
$'echo "$(stat -c "%Y" "$0")\t$0"' {} \; | \
sort -k1nr | cut -f 2 | head -n 500
deve fazer o truque.
Quebrando:
find . -exec
executa um comando em todos os arquivos abaixo do diretório atual sh -c "command" {}
runs command
para cada arquivo que find
vê, com $0
definido para o nome do arquivo stat -c "+%Y" "$0"
imprime a hora da modificação do arquivo especificado em "$0"
sort -k1nr
classifica com base no primeiro campo na ordem numérica inversa cut -f 2
retira o campo de hora da modificação, deixando apenas o nome do arquivo head -n 500
imprime no máximo as 500 principais linhas Os $'...'
e \t
são porque sort
e cut
use \t
(ou seja, TAB) como o delimitador de campo.
Para ser compatível com POSIX, você pode substituir
$'...\t...'
com
"...<press Ctrl-V, Tab>..."
Infelizmente, stat
não é portátil. O Linux usa stat -c "%Y"
, mas o FreeBSD e o Mac OS usam stat -f "%m"
.
Se você realmente quer um método portátil, seria mais fácil usar Python, Perl ou Ruby.
Tags find files perl posix timestamps