Lista de datas de arquivos com sed

4

Eu estou tentando extrair a data modificada / modificada arquivos e pastas da semana passada com sed , mas estou lutando. Aqui está minha opinião sobre ls -l | sed '/codehere//g'
mas não tenho idéia de como essa filtragem pode ser feita, exceto com awk .

Saída do meu comando ls -l :

vladimir@vladimir-K54L ~/Desktop $ ls -l
total 140
-rw-r--r-- 1 vladimir vladimir   516 Feb 27 19:33 4taOS.zip
-rw-r--r-- 1 vladimir vladimir 63092 Feb 18 18:14 angela.jpg
-rw-r--r-- 1 vladimir vladimir     0 Mar  4 00:23 _cmd.txt
-rw-r--r-- 1 vladimir vladimir     5 Feb 27 19:26 dat1.txt
-rw-r--r-- 1 vladimir vladimir     5 Feb 27 19:26 dat2.txt
-rw-r--r-- 1 vladimir vladimir     5 Feb 27 19:26 dat3.txt
-rw-r--r-- 1 vladimir vladimir     5 Feb 27 19:26 dat4.txt
-rw-r--r-- 1 vladimir vladimir     5 Feb 27 19:26 dat5.txt
-rw-r--r-- 1 vladimir vladimir     5 Feb 27 19:26 dat6.txt
-rw-r--r-- 1 vladimir vladimir   226 Feb 24 13:21 java.html
-rwxr-xr-x 1 vladimir vladimir   299 Feb 27 19:27 lab1.sh
-rwxr-xr-x 1 vladimir vladimir   615 Mar  5 00:36 labperl2.plx
-rw-r--r-- 1 vladimir vladimir    18 Mar  3 12:44 naredbi.txt
-rwxr-xr-x 1 vladimir vladimir  1105 Mar  3 12:51 OSPRVKOL2015.plx
-rwxr-xr-x 1 vladimir vladimir   187 Feb 27 19:13 perl.plx
-rw-r--r-- 1 vladimir vladimir   257 Feb 23 21:44 primer
-rwxr-xr-x 1 vladimir vladimir   136 Feb 23 21:55 prva.sh
-rwxr-xr-x 1 vladimir vladimir    44 Feb 23 21:56 treta.sh
-rw-r--r-- 1 vladimir vladimir   137 Mar  4 23:17 vlade.txt
-rw-r--r-- 1 vladimir vladimir    67 Mar  3 12:44 vlez.txt
-rwxrwxrwx 1 vladimir vladimir   110 Feb 23 21:52 vtora.sh  

Por isso, só preciso imprimir os nomes dos arquivos, exemplo vtora.sh , dependendo das datas modificadas (somente na última semana).

    
por Vladimir Danoski 05.03.2017 / 00:30

2 respostas

3

Primeiro de tudo, você realmente não quer estar fazendo isso. analisar a saída de ls é muito propenso a erros e há maneiras muito melhores de alcançar o que você deseja ( find , por exemplo). No entanto, suspeito que seu professor queira que você aprenda expressões regulares e esteja apenas usando isso como um exemplo. Eu certamente espero que sim, de qualquer maneira.

De qualquer forma, isso funcionará na saída que você mostrou em sua pergunta e para esta semana. Ele falhará na próxima semana e falhará se seus nomes de arquivos tiverem espaços ou outra estranheza em seus nomes. Ele falhará em qualquer outra data que não a semana passada especificamente. Dito isso, funciona no seu exemplo:

$ ls -l | sed -En ' s/.*Feb *2[6-8].* (.*)//p; s/.*Mar *[1-4].* (.*)//p; '
4taOS.zip
_cmd.txt
dat1.txt
dat2.txt
dat3.txt
dat4.txt
dat5.txt
dat6.txt
lab1.sh
naredbi.txt
OSPRVKOL2015.plx
perl.plx
vlade.txt
vlez.txt

Estou usando -E , que ativa expressões regulares estendidas (sem isso, eu precisaria escapar de ( e ) ) e -n , o que significa "não imprima, a menos que eu diga". Em seguida, o operador de substituição deve procurar linhas correspondentes a Feb 2 e qualquer número entre 6 e 8 (últimas semanas em fevereiro) ou Mar e qualquer número entre 1 e 4 (datas da última semana de março). Se essas linhas corresponderem, substituirá tudo na linha pela última cadeia de caracteres não espaciais. É isso que os parênteses fazem: eles "capturam" um padrão para que ele possa ser usado no lado direito da substituição.

    
por terdon 05.03.2017 / 01:27
3

a resposta de terdon fornece uma solução adequada para os requisitos do professor. Eu gostaria de fornecer uma solução adequada. Embora seja certamente bom e diligente seguir as instruções na aula, a teoria e a prática geralmente diferem, e o que os professores ensinam / exigem no curso às vezes não é feito profissionalmente onde você não quer ser gritado pelo gerente / cliente.

A abordagem adequada deve ser:

$ find . -maxdepth 1  -type f -mtime -7

A maneira como isso funciona é simples:

  • find é um comando que percorre recursivamente a árvore de diretórios. Neste caso, estamos usando GNU find no Ubuntu.
  • próximo argumento é localização - o diretório pai que queremos percorrer. Nesse caso, . pode ser deixado de fora e assumido automaticamente. Em outro SO find (se bem me lembro, BSD find ) pode requerer tal opção.
  • -maxdepth 1 nos limita apenas a listar arquivos no diretório atual.
  • -type f limitará a saída apenas a arquivos.
  • -mtime -7 filtrará os arquivos com um tempo de modificação de -7 dias, ou seja, uma semana.
por Sergiy Kolodyazhnyy 05.03.2017 / 09:28