Deseja classificar arquivos por data de atualização, incluindo subdiretórios

17

Quero classificar apenas os arquivos por datas de atualização, incluindo subdiretórios.

Eu descobri ls -lrtR | grep ^-. mas parece não classificar por datas de atualização.

E eu preciso salvar esta lista em um arquivo. É possível?

Apr 01 2010  InsideDoosanServiceImpl.class  // in A directory
Apr 08 2010  MainController.class  // in B directory
Apr 07 2010  RecommendController.class  // in B directory
Apr 01 2010  MainDao.class  // in B directory

Quero dizer, a lista inteira não é ordenada por data, mas primeiro por pasta e ordenada por data.

Quero uma lista ordenada pela data, incluindo todos os subdiretórios.

Deckard
fonte

Respostas:

12

Não tenho certeza do que exatamente você quer dizer com isso update dates, mas você está usando a -ropção que, de acordo com o homem, faz isso -

-r Inverte a ordem da classificação para obter a ordem lexicográfica reversa ou as entradas mais antigas primeiro (ou os arquivos maiores por último, se combinados com a classificação por tamanho

Eu acho que isso deve ser bom o suficiente para você, se você precisar de arquivos classificados por hora.

ls -lRt

Se você não precisar de todos os outros itens listados até lsentão, poderá usar -

ls -1Rt

Para capturar o resultado em um arquivo, você pode usar o operador de redirecionamento >e fornecer um nome de arquivo. Então você pode fazer algo assim -

ls -lRt > sortedfile.list

Atualizar:

find . -type f -exec ls -lt {} +
jaypal singh
fonte
Quero dizer a última vez que um arquivo foi modificado :)
O resultado da classificação é ordenado por pasta e data. Quero classificar por data e pasta .. é possível?
Desculpe, você pode me mostrar alguma saída? Não segui bem a classificação da pasta, se você usou ls -lrt.
Jaypal singh
// Jaypal Singh, atualizei minha saída para minha pergunta ↑ :). Eu realmente espero que você entenda e desculpe pelo meu inglês ruim.
11
Isso falhará se a lista de arquivos for suficientemente longa para forçar xargsa realização de várias chamadas ls, pois os arquivos serão classificados apenas corretamente em cada lschamada, mas não terão uma ordem global coerente na saída.
Brandon Rhodes
19

Com ls, -R irá recursar diretórios e -t classificará por modificação. No entanto, ele percorre diretórios recursivamente e aplica -t a cada diretório. Ele não acumula todos os arquivos de todos os diretórios e depois classifica. (Tanto quanto eu entendo, o último é o que você quer)

Com o gnu find (1), você pode especificar o formato da saída para incluir o número de segundos desde a época e o nome do arquivo e, em seguida, pode canalizá-lo para classificar (1).

find . -type f -printf "%T@ %f\n" | sort -n > out.txt
Rolf Rander
fonte
Sim GNU findajuda. Mas o OP trabalha em AIXmáquinas, então GNU findnão estava disponível para ele.
Jaypal singh
É uma pena lsque não seja possível acumular arquivos antes da classificação. lsé tão rápido em comparação com find.
Nathan ReinstateMonica Arthur
lse findlê os mesmos dados, então não consigo imaginar nenhum motivo para ser consideravelmente mais rápido do que encontrar. No meu sistema descoberta é 5 vezes mais rápido (pesquisar através de cerca de meio milhão de arquivos)
Rolf Rander
7
Você pode querer uma data / hora completa e não apenas o nome do arquivo, mas também o caminho na saída, nesse caso, modificar a sequência de formatação: find . -type f -printf "%T@ %Tc %p\n" | sort -n > out.txtproduzindo entradas de saída como 1427913836.2330520210 wed 1 apr 2015 20:43:56 ./subdir/file.txt.
303 Carl
Ótimo. Isso realmente me ajudou. Eu tenho procurado uma maneira de classificar subdiretórios há muito tempo!
Bhu Boue vidya