localize o comando para os 500 arquivos mais recentes em uma árvore de diretórios e também seja compatível com POSIX

2

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.

    
por Sandeep 01.06.2012 / 20:18

2 respostas

2

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

    
por 01.06.2012 / 20:45
0

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.

    
por 02.06.2012 / 05:19