Usando LS para mostrar a data modificada e um número específico de arquivos

0

Estou usando ls -t | head -8 para mostrar os últimos 8 arquivos modificados em um diretório, mas isso só imprime o nome do arquivo.

Existe uma maneira de alterar o comando acima para mostrar também a data de modificação dos nomes dos arquivos?

    
por MitchMahoney 06.06.2018 / 16:38

3 respostas

3

Você vai querer usar stat para obter o arquivo metadados:

stat -c $'%y\t%n' * | sort -n | head -8
    
por glenn jackman 06.06.2018 / 16:55
2

stat é uma maneira fácil, mas não é possível imprimir o carimbo de data e hora em um formato como ls -l . Se você quiser um controle mais refinado sobre o formato, use find com a opção -printf , por exemplo, para um formato (quase) ls -l -like:

find -maxdepth 1 -type f -printf "%T+#%Tb %Td %TH:%TM\t%p\n" | sort -rn | cut -d# -f2- | head -8

O %T+ é necessário para classificar a saída corretamente e ser removido por cut aftwerwards. Leia man find para saber mais sobre os poderosos recursos de find -printf opção.

Exemplo de execução

$ ls -l
total 0
-rw-rw-r-- 1 dessert dessert 0 May 30 20:22 last week
-rw-rw-r-- 1 dessert dessert 0 Jun  6 17:22 today
-rw-rw-r-- 1 dessert dessert 0 Jun  5 17:22 yesterday
$ stat -c $'%y\t%n' * | sort -n
2018-05-30 20:22:29.919608691 +0200     last week
2018-06-05 17:22:10.207084356 +0200     yesterday
2018-06-06 17:22:01.940284127 +0200     today
$ find -maxdepth 1 -type f -printf "%T+#%Tb %Td %TH:%TM\t%p\n" | sort -rn | cut -d# -f2-
Jun 06 17:22    ./today
Jun 05 17:22    ./yesterday
May 30 20:22    ./last week
$ find -maxdepth 1 -type f -printf "%T+#%Tc\t%p\n" | sort -rn | cut -d# -f2-
Wed 06 Jun 2018 05:22:01 PM CEST        ./today
Tue 05 Jun 2018 05:22:10 PM CEST        ./yesterday
Wed 30 May 2018 08:22:29 PM CEST        ./last week
$ find -maxdepth 1 -type f -printf "%T+\t%p\n" | sort -rn
2018-06-06+17:22:01.9402841270  ./today
2018-06-05+17:22:10.2070843560  ./yesterday
2018-05-30+20:22:29.9196086910  ./last week
    
por dessert 06.06.2018 / 17:40
0

O comando ls não é a ferramenta mais apropriada para usar nesta situação, conforme mostrado por outras respostas. Há uma maneira complicada de extrair as informações desejadas da saída de ls , embora tenha limitações. É um bom exemplo de como trabalhar com ls pode se tornar rapidamente complicado.

O problema específico com essa cadeia de comandos é que o uso do comando tr remove quaisquer ocorrências múltiplas de espaço em branco e substitui por um único espaço em branco. Isso afetará nomes de arquivos, tornando-os inadequados para análise por uma máquina. Analisar sl é geralmente uma atividade desencorajada.

ls -lrt| tail -4| tr -s ' '| cut -d ' ' -f6-| tac

A ordem reversa dos resultados ls , com a opção -r , é usada para evitar a saída da linha 'Total' pela opção -l de ls , e tac é usado no final para reordene os resultados depois de eliminar a saída indesejada.

    
por Arronical 06.06.2018 / 17:52