Como encontrar e classificar arquivos com base na data e hora da modificação no Linux
Normalmente temos o hábito de salvar muitas informações em forma de arquivos em nosso sistema. Alguns, arquivos ocultos, alguns mantidos em uma pasta separada criada para nossa facilidade de entendimento, enquanto outros como estão. Mas, tudo isso preenche nossos diretórios; geralmente desktop, fazendo com que pareça uma bagunça. Porém, o problema surge quando precisamos procurar um determinado arquivo modificado em determinada data e hora nesta enorme coleção.
Pessoas confortáveis com GUIs podem encontrá-lo usando o Gerenciador de Arquivos, que lista os arquivos em formato de listagem longa, tornando mais fácil descobrir o que queremos, mas aqueles usuários que têm o hábito de telas pretas, ou mesmo qualquer pessoa que trabalhe em servidores desprovidos de GUIs, deseja um comando simples ou conjunto de comandos que possa facilitar sua pesquisa.
A verdadeira beleza do Linux aparece aqui, já que o Linux possui uma coleção de comandos que, se usados separadamente ou em conjunto, podem ajudar a procurar um arquivo ou classificar uma coleção de arquivos de acordo com seu nome, data de modificação, hora de criação ou até mesmo qualquer filtro que você poderia pensar em aplicar para obter seu resultado.
Aqui, revelaremos a verdadeira força do Linux examinando um conjunto de comandos que podem ajudar a classificar um arquivo ou até mesmo uma lista de arquivos por Data e Hora.
Utilitários Linux para classificar arquivos no Linux
Alguns utilitários básicos de linha de comando do Linux que são suficientes apenas para classificar um diretório com base em Data e Hora são:
comando ls
ls – Listando o conteúdo do diretório, este utilitário pode listar os arquivos e diretórios e pode até listar todas as informações de status sobre eles, incluindo: data e hora da modificação ou acesso, permissões, tamanho, proprietário, grupo etc. .
Já cobrimos muitos artigos sobre comando ls e comando sort do Linux, você pode encontrá-los abaixo:
- Aprenda o comando ls com 15 exemplos básicos
- Aprenda 7 comandos Advance ls com exemplos
- 15 perguntas úteis da entrevista sobre o comando ls no Linux
comando de classificação
classificar – Este comando pode ser usado para classificar a saída de qualquer pesquisa apenas por qualquer campo ou qualquer coluna específica do campo.
Já cobrimos dois artigos sobre o comando sort do Linux, você pode encontrá-los abaixo:
- 14 Exemplos de comandos ‘sort’ do Linux – Parte 1
- 7 exemplos úteis de comandos ‘sort’ do Linux – Parte 2
Esses comandos são, por si só, comandos muito poderosos para dominar se você trabalha em telas pretas e precisa lidar com muitos arquivos, apenas para obter o que deseja.
Algumas maneiras de classificar arquivos usando data e hora
Abaixo está a lista de comandos para classificar com base em data e hora.
1. Liste os arquivos com base no horário de modificação
O comando abaixo lista os arquivos em formato de listagem longa e classifica os arquivos com base na hora da modificação, os mais novos primeiro. Para classificar na ordem inversa, use a opção '-r'
com este comando.
# ls -lt
total 673768
-rwxr----- 1 tecmint tecmint 3312130 Jan 19 15:24 When You Are Gone.MP3
-rwxr----- 1 tecmint tecmint 4177212 Jan 19 15:24 When I Dream At Night - Marc Anthony-1.mp3
-rwxr----- 1 tecmint tecmint 4177212 Jan 19 15:24 When I Dream At Night - Marc Anthony.mp3
-rwxr----- 1 tecmint tecmint 6629090 Jan 19 15:24 Westlife_Tonight.MP3
-rwxr----- 1 tecmint tecmint 3448832 Jan 19 15:24 We Are The World by USA For Africa (Michael Jackson).mp3
-rwxr----- 1 tecmint tecmint 8580934 Jan 19 15:24 This Love.mp3
-rwxr----- 1 tecmint tecmint 2194832 Jan 19 15:24 The Cross Of Changes.mp3
-rwxr----- 1 tecmint tecmint 5087527 Jan 19 15:24 T.N.T. For The Brain 5.18.mp3
-rwxr----- 1 tecmint tecmint 3437100 Jan 19 15:24 Summer Of '69.MP3
-rwxr----- 1 tecmint tecmint 4360278 Jan 19 15:24 Smell Of Desire.4.32.mp3
-rwxr----- 1 tecmint tecmint 4582632 Jan 19 15:24 Silence Must Be Heard 4.46.mp3
-rwxr----- 1 tecmint tecmint 4147119 Jan 19 15:24 Shadows In Silence 4.19.mp3
-rwxr----- 1 tecmint tecmint 4189654 Jan 19 15:24 Sarah Brightman & Enigma - Eden (remix).mp3
-rwxr----- 1 tecmint tecmint 4124421 Jan 19 15:24 Sade - Smooth Operator.mp3
-rwxr----- 1 tecmint tecmint 4771840 Jan 19 15:24 Sade - And I Miss You.mp3
-rwxr----- 1 tecmint tecmint 3749477 Jan 19 15:24 Run To You.MP3
-rwxr----- 1 tecmint tecmint 7573679 Jan 19 15:24 Roger Sanchez_Another Chance_Full_Mix.mp3
-rwxr----- 1 tecmint tecmint 3018211 Jan 19 15:24 Principal Of Lust.3.08.mp3
-rwxr----- 1 tecmint tecmint 5688390 Jan 19 15:24 Please Forgive Me.MP3
-rwxr----- 1 tecmint tecmint 3381827 Jan 19 15:24 Obvious.mp3
-rwxr----- 1 tecmint tecmint 5499073 Jan 19 15:24 Namstey-London-Viraaniya.mp3
-rwxr----- 1 tecmint tecmint 3129210 Jan 19 15:24 MOS-Enya - Only Time (Pop Radio mix).m
2. Liste os arquivos com base na hora do último acesso
Listagem de arquivos no diretório com base na hora do último acesso, ou seja, com base na hora em que o arquivo foi acessado pela última vez, não modificado.
# ls -ltu
total 3084272
drwxr-xr-x 2 tecmint tecmint 4096 Jan 19 15:24 Music
drwxr-xr-x 2 tecmint tecmint 4096 Jan 19 15:22 Linux-ISO
drwxr-xr-x 2 tecmint tecmint 4096 Jan 19 15:22 Music-Player
drwx------ 3 tecmint tecmint 4096 Jan 19 15:22 tor-browser_en-US
drwxr-xr-x 2 tecmint tecmint 4096 Jan 19 15:22 bin
drwxr-xr-x 11 tecmint tecmint 4096 Jan 19 15:22 Android Games
drwxr-xr-x 2 tecmint tecmint 4096 Jan 19 15:22 Songs
drwxr-xr-x 2 tecmint tecmint 4096 Jan 19 15:22 renamefiles
drwxr-xr-x 2 tecmint tecmint 4096 Jan 19 15:22 katoolin-master
drwxr-xr-x 2 tecmint tecmint 4096 Jan 19 15:22 Tricks
drwxr-xr-x 3 tecmint tecmint 4096 Jan 19 15:22 Linux-Tricks
drwxr-xr-x 6 tecmint tecmint 4096 Jan 19 15:22 tuptime
drwxr-xr-x 4 tecmint tecmint 4096 Jan 19 15:22 xdm
drwxr-xr-x 2 tecmint tecmint 20480 Jan 19 15:22 ffmpeg usage
drwxr-xr-x 2 tecmint tecmint 4096 Jan 19 15:22 xdm-helper
3. Listar arquivos com base na hora da última modificação
Listagem de arquivos no diretório com base na hora da última modificação das informações de status do arquivo, ou 'ctime'
. Este comando listaria primeiro o arquivo cujas informações de status como: proprietário, grupo, permissões, tamanho, etc. foram alteradas recentemente.
# ls -ltc
total 3084272
drwxr-xr-x 2 tecmint tecmint 4096 Jan 19 15:24 Music
drwxr-xr-x 2 tecmint tecmint 4096 Jan 19 13:05 img
-rw------- 1 tecmint tecmint 262191 Jan 19 12:15 tecmint.jpeg
drwxr-xr-x 5 tecmint tecmint 4096 Jan 19 10:57 Desktop
drwxr-xr-x 7 tecmint tecmint 12288 Jan 18 16:00 Downloads
drwxr-xr-x 13 tecmint tecmint 4096 Jan 18 15:36 VirtualBox VMs
-rwxr-xr-x 1 tecmint tecmint 691 Jan 13 14:57 special.sh
-rw-r--r-- 1 tecmint tecmint 654325 Jan 4 16:55 powertop-2.7.tar.gz.save
-rw-r--r-- 1 tecmint tecmint 654329 Jan 4 11:17 filename.tar.gz
drwxr-xr-x 3 tecmint tecmint 4096 Jan 4 11:04 powertop-2.7
-rw-r--r-- 1 tecmint tecmint 447795 Dec 31 14:22 Happy-New-Year-2016.jpg
-rw-r--r-- 1 tecmint tecmint 12 Dec 18 18:46 ravi
-rw-r--r-- 1 tecmint tecmint 1823 Dec 16 12:45 setuid.txt
...
Se a opção '-a'
for usada com os comandos acima, eles poderão listar e classificar até mesmo os arquivos ocultos no diretório atual, e a opção '-r'
listará a saída ao contrário ordem.
Para uma classificação mais aprofundada, como a classificação na Saída do comando find, no entanto, ls
também pode ser usado, mas há 'sort '
é mais útil porque a saída pode não ter apenas o nome do arquivo, mas também quaisquer campos desejados pelo usuário.
Os comandos abaixo mostram o uso de sort
com o comando find
para classificar a lista de arquivos com base em Data e Hora.
Para saber mais sobre o comando find, siga este link: 35 exemplos práticos do comando ‘find’ no Linux
4. Classificando arquivos com base no mês
Aqui, usamos o comando find
para encontrar todos os arquivos no diretório raiz ('/')
e então imprimimos o resultado como: Mês em qual arquivo foi acessado e depois o nome do arquivo. Desse resultado completo, listamos aqui as 11 principais entradas.
# find / -type f -printf "\n%Ab %p" | head -n 11
Dec /usr/lib/nvidia/pre-install
Dec /usr/lib/libcpufreq.so.0.0.0
Apr /usr/lib/libchromeXvMCPro.so.1.0.0
Apr /usr/lib/libt1.so.5.1.2
Apr /usr/lib/libchromeXvMC.so.1.0.0
Apr /usr/lib/libcdr-0.0.so.0.0.15
Dec /usr/lib/msttcorefonts/update-ms-fonts
Nov /usr/lib/ldscripts/elf32_x86_64.xr
Nov /usr/lib/ldscripts/elf_i386.xbn
Nov /usr/lib/ldscripts/i386linux.xn
O comando abaixo classifica a saída usando a chave como primeiro campo, especificado por '-k1'
e, em seguida, classifica o mês conforme especificado por 'M'
antes dele.
# find / -type f -printf "\n%Ab %p" | head -n 11 | sort -k1M
Apr /usr/lib/libcdr-0.0.so.0.0.15
Apr /usr/lib/libchromeXvMCPro.so.1.0.0
Apr /usr/lib/libchromeXvMC.so.1.0.0
Apr /usr/lib/libt1.so.5.1.2
Nov /usr/lib/ldscripts/elf32_x86_64.xr
Nov /usr/lib/ldscripts/elf_i386.xbn
Nov /usr/lib/ldscripts/i386linux.xn
Dec /usr/lib/libcpufreq.so.0.0.0
Dec /usr/lib/msttcorefonts/update-ms-fonts
Dec /usr/lib/nvidia/pre-install
5. Classifique os arquivos com base na data
Aqui, novamente usamos o comando find
para encontrar todos os arquivos no diretório raiz, mas agora imprimiremos o resultado como: última data em que o arquivo foi acessado, última hora em que o arquivo foi acessado e depois nome do arquivo. Desses, retiramos as 11 melhores entradas.
# find / -type f -printf "\n%AD %AT %p" | head -n 11
12/08/15 11:30:38.0000000000 /usr/lib/nvidia/pre-install
12/07/15 10:34:45.2694776230 /usr/lib/libcpufreq.so.0.0.0
04/11/15 06:08:34.9819910430 /usr/lib/libchromeXvMCPro.so.1.0.0
04/11/15 06:08:34.9939910430 /usr/lib/libt1.so.5.1.2
04/11/15 06:08:35.0099910420 /usr/lib/libchromeXvMC.so.1.0.0
04/11/15 06:08:35.0099910420 /usr/lib/libcdr-0.0.so.0.0.15
12/18/15 11:19:25.2656728990 /usr/lib/msttcorefonts/update-ms-fonts
11/12/15 12:56:34.0000000000 /usr/lib/ldscripts/elf32_x86_64.xr
11/12/15 12:56:34.0000000000 /usr/lib/ldscripts/elf_i386.xbn
11/12/15 12:56:34.0000000000 /usr/lib/ldscripts/i386linux.xn
O comando de classificação abaixo primeiro classifica com base no último dígito do ano, depois classifica com base no último dígito do mês na ordem inversa e, finalmente, classifica com base no primeiro campo. Aqui, '1.8' significa a 8ª coluna do primeiro campo e 'n' à frente significa classificação numérica, enquanto 'r' indica ordem reversa Ordenação.
# find / -type f -printf "\n%AD %AT %p" | head -n 11 | sort -k1.8n -k1.1nr -k1
12/07/15 10:34:45.2694776230 /usr/lib/libcpufreq.so.0.0.0
12/08/15 11:30:38.0000000000 /usr/lib/nvidia/pre-install
12/18/15 11:19:25.2656728990 /usr/lib/msttcorefonts/update-ms-fonts
11/12/15 12:56:34.0000000000 /usr/lib/ldscripts/elf32_x86_64.xr
11/12/15 12:56:34.0000000000 /usr/lib/ldscripts/elf_i386.xbn
11/12/15 12:56:34.0000000000 /usr/lib/ldscripts/i386linux.xn
04/11/15 06:08:34.9819910430 /usr/lib/libchromeXvMCPro.so.1.0.0
04/11/15 06:08:34.9939910430 /usr/lib/libt1.so.5.1.2
04/11/15 06:08:35.0099910420 /usr/lib/libcdr-0.0.so.0.0.15
04/11/15 06:08:35.0099910420 /usr/lib/libchromeXvMC.so.1.0.0
6. Classificando arquivos com base no tempo
Aqui, novamente usamos o comando find
para listar os 11 principais arquivos no diretório raiz e imprimir o resultado no formato: última vez que o arquivo foi acessado e depois o nome do arquivo.
# find / -type f -printf "\n%AT %p" | head -n 11
11:30:38.0000000000 /usr/lib/nvidia/pre-install
10:34:45.2694776230 /usr/lib/libcpufreq.so.0.0.0
06:08:34.9819910430 /usr/lib/libchromeXvMCPro.so.1.0.0
06:08:34.9939910430 /usr/lib/libt1.so.5.1.2
06:08:35.0099910420 /usr/lib/libchromeXvMC.so.1.0.0
06:08:35.0099910420 /usr/lib/libcdr-0.0.so.0.0.15
11:19:25.2656728990 /usr/lib/msttcorefonts/update-ms-fonts
12:56:34.0000000000 /usr/lib/ldscripts/elf32_x86_64.xr
12:56:34.0000000000 /usr/lib/ldscripts/elf_i386.xbn
12:56:34.0000000000 /usr/lib/ldscripts/i386linux.xn
O comando abaixo classifica a saída com base na primeira coluna do primeiro campo da saída, que é o primeiro dígito da hora.
# find / -type f -printf "\n%AT %p" | head -n 11 | sort -k1.1n
06:08:34.9819910430 /usr/lib/libchromeXvMCPro.so.1.0.0
06:08:34.9939910430 /usr/lib/libt1.so.5.1.2
06:08:35.0099910420 /usr/lib/libcdr-0.0.so.0.0.15
06:08:35.0099910420 /usr/lib/libchromeXvMC.so.1.0.0
10:34:45.2694776230 /usr/lib/libcpufreq.so.0.0.0
11:19:25.2656728990 /usr/lib/msttcorefonts/update-ms-fonts
11:30:38.0000000000 /usr/lib/nvidia/pre-install
12:56:34.0000000000 /usr/lib/ldscripts/elf32_x86_64.xr
12:56:34.0000000000 /usr/lib/ldscripts/elf_i386.xbn
12:56:34.0000000000 /usr/lib/ldscripts/i386linux.xn
7. Classificando Ouptut de ls -l com base na data
Este comando classifica a saída do comando 'ls -l'
com base no 6º campo do mês e, em seguida, com base no 7º campo, que é a data, numericamente.
# ls -l | sort -k6M -k7n
total 116
-rw-r--r-- 1 root root 0 Oct 1 19:51 backup.tgz
drwxr-xr-x 2 root root 4096 Oct 7 15:27 Desktop
-rw-r--r-- 1 root root 15853 Oct 7 15:19 powertop_report.csv
-rw-r--r-- 1 root root 79112 Oct 7 15:25 powertop.html
-rw-r--r-- 1 root root 0 Oct 16 15:26 file3
-rw-r--r-- 1 root root 13 Oct 16 15:17 B
-rw-r--r-- 1 root root 21 Oct 16 15:16 A
-rw-r--r-- 1 root root 64 Oct 16 15:38 C
Conclusão
Da mesma forma, tendo algum conhecimento do comando sort, você pode classificar quase qualquer listagem com base em qualquer campo e até mesmo em qualquer coluna que desejar. Esses foram alguns truques para ajudá-lo a classificar arquivos com base em data ou hora. Você pode criar seus próprios truques com base neles. Porém, se você tiver algum outro truque interessante, pode sempre mencioná-lo em seus comentários.