Encontre todos os arquivos que foram modificados pela última vez em um dia específico - como segunda-feira?

2

Portanto, quero usar find para retornar uma lista de todos os arquivos .html em um determinado diretório que foi modificado pela última vez em uma segunda-feira. Como posso fazer isso?

    
por InquilineKea 24.03.2014 / 22:11

5 respostas

4

Não tenho certeza de uma boa maneira de fazer isso diretamente usando apenas find ou similar, mas você pode usar find e grep :

find -printf '%Tw:%h/%f
find -name '*.html' -type f -printf '%Tw:%h/%f
$ ls -la
total 68
drwxr-xr-x  2 anthony anthony  4096 Mar 24 17:53 .
drwxrwxrwt 98 root    root    61440 Mar 24 17:55 ..
-rw-r--r--  1 anthony anthony     0 Mar 24 17:53 monday
-rw-r--r--  1 anthony anthony     0 Mar 23 11:12 sunday
' | grep -z '^1:'
' | grep -z '^1:'

Como é find , você pode combinar outros sinalizadores:

1:./.
0:./sunday
1:./monday

para obter apenas os arquivos que terminam com .html .

Explicação

Aqui está o meu diretório de testes:

find -printf '%Tw:%h/%f
find -name '*.html' -type f -printf '%Tw:%h/%f
$ ls -la
total 68
drwxr-xr-x  2 anthony anthony  4096 Mar 24 17:53 .
drwxrwxrwt 98 root    root    61440 Mar 24 17:55 ..
-rw-r--r--  1 anthony anthony     0 Mar 24 17:53 monday
-rw-r--r--  1 anthony anthony     0 Mar 23 11:12 sunday
' | grep -z '^1:'
' | grep -z '^1:'
O argumento% p_de find usa uma string de formatação. Aqui,% T significa tempo da última modificação. O -printf significa o dia da semana, de 0 (domingo) a 6 (sábado). Você pode obter o nome com w (abreviado: Mon) ou a (completo: segunda-feira), mas esses são específicos de localidade. A fornece literal : . : é o caminho e o nome do arquivo. %h/%f null-separa as entradas (como -print0 faz).

Assim, imprimiremos algo como 1:./.<NULL>0:./sunday<NULL>1:./monday<NULL> , que, se você substituir o NULL por nova linha por legibilidade tr 'grep -z '^1:'' '\n' , é:

1:./.
0:./sunday
1:./monday

Então %code% procura itens que começam com 1 :, que é segunda-feira.

    
por 24.03.2014 / 22:57
2

Você pode obter ls para as datas de saída em um formato personalizado

ls --time-style=+%A *.html | grep " Monday "

Supondo que "Monday" não está em nenhum nome de arquivo.

    
por 24.03.2014 / 22:41
1

Embora eu ache sua pergunta altamente suspeita, a resposta é:

find ./ -type f -name '*.html' -printf "%Ta %p\n" | grep '^Mon' | sed 's:^Mon ::'

O qual encontrará todos os arquivos terminados em .html que foram modificados pela última vez em qualquer segunda-feira do histórico humano, de acordo com o fuso horário atual definido no servidor.

    
por 24.03.2014 / 23:14
1

Você pode usar o comando find + grep + date :

find /path -iname "*.html" -printf "%TY%Tm%Td\t%p\n" | \
grep $(date -dlast-monday +%Y%m%d)

se você quiser imprimir apenas o nome do arquivo, use:

find /path -iname "*.html" -printf "%TY%Tm%Td\t%p\n" | \
awk "/$(date -dlast-monday +%Y%m%d)"'/{print $NF}'

OR

 find /path -iname "*.html" -printf "%Ta\t%p\n" | awk '/Mon/{print $NF}'
    
por 24.03.2014 / 23:06
0

Você pode usar find com stat para encontrar todos os arquivos que possuem um registro de data e hora de modificação em uma segunda-feira da seguinte forma:

find . -type f -exec stat -t %a  {} \; | awk 'match($10, /"Mon"/) {print $16}'

O comando find encontrará todos os arquivos e os informará que serão canalizados para o filtro awk . awk corresponderá ao campo número 10, que é a hora da modificação do arquivo com a string "Mon" para extrair os arquivos modificados às segundas-feiras. A instrução print $16 imprimirá o nome do arquivo. você pode remover $16 para imprimir todos os campos ou usar qualquer número para imprimir os campos selecionados.

Exemplo de saída da primeira parte (no OS X):

$ cd /usr ; find . -type file -exec stat -t %a  {} \;

16777218 20556154 -rwxr-xr-x 1 root wheel 0 19600 "Mon" "Thu" "Thu" "Sat" 4096 16 0x20 ./bin/du

16777218 20547205 -rwxr-xr-x 1 root wheel 0 14256 "Wed" "Thu" "Thu" "Wed" 4096 16 0x20 ./bin/dwarfdump

16777218 20586248 -rwxr-xr-x 2 root wheel 0 925 "Fri" "Thu" "Thu" "Sun" 4096 0 0x20 ./bin/easy_install

    
por 24.03.2014 / 22:57

Tags