Você não está autenticado.

Anúncio

Arch Linux Brasil está precisando de sua colaboração para realizar o pagamento do domínio e do host, para colaborar, realizar doações via paypal.

Para mais informações: contato at archlinux-br.org.

#1 24/09/2017 06:09:48

beagle
Membro
Registrado: 31/08/2015
Mensagens: 130

Como listar o último arquivo modificado de um diretório (e subs)

Oi galera,

atualmente eu to usando esse comando no terminal

ls -Art | tail -n 1

que ele me retorna o último arquivo modificado desde diretório. Acontece que ele só trás do diretório analisado, os subdiretórios não.
Como eu faço pra retornar o último resultado incluindo os subdiretórios?

Offline

#2 24/09/2017 22:33:41

swatquest
Moderador
Registrado: 05/10/2010
Mensagens: 1.949

Re: Como listar o último arquivo modificado de um diretório (e subs)

tente usar o comando find para isso

por exemplo
find . -type f -mtime -1 | tail -1

.  - informa para procurar a partir da pasta atual
-type f  - é para informar que será apenas arquivos e não diretórios
-mtine  irá procurar por arquivos modificados nas últimas horas

exemplo

-mtime +0 # procurar arquivos modificados acima de 24 horas atrás
-mtime 0 #procurar por arquivos modificado nas  últimas 24 horas
-mtime -1 #procurar em menos de um dias atrás (memo que -mtime 0)
-mtime 1 # procurar arquivos modificados nas últimas 48 horas
-mtime +1 # procurar procurar arquivos modificados acima de 48 atrás

Última edição por swatquest (24/09/2017 22:37:32)

Offline

#3 25/09/2017 21:32:56

beagle
Membro
Registrado: 31/08/2015
Mensagens: 130

Re: Como listar o último arquivo modificado de um diretório (e subs)

Ta mas eu consigo jogar esse UM valor numa variavel??

Eu estava jogando assim antes
name=$(ls -Art | tail -n 1)

ai ele me retornava o ULTIMO arquivo modificado, mas so da pasta atual... ate ai tudo bem, agora eu preciso do script que falei acima, preciso das SUBPASTAS.

dai esse codigo ai me retorna por exemplo
[[email protected] pdf]$ ls -Art | tail -n 1
teste.txt

ele retorna isso dai teste.txt somente.
ja o outro codigo retorna isso

[[email protected] pdf]$ find . -type f -mtime -1 | tail -1
./teste.txt

um ./teste.txt

sera que ./ tem alguma coisa a ver? dar problema?
dai eu rpeciso jogar isso numa variavel.. esse resultado.

Sera que fazendo
name=$(find . -type f -mtime -1 | tail -1)
consigo jogar pra variavel name??

eu preciso que retorne nessa variavel apenas o teste.txt e nao ./teste.txt... parece que tem como remover parte do nome de uma variavel automaticamente...

Offline

#4 25/09/2017 21:34:00

beagle
Membro
Registrado: 31/08/2015
Mensagens: 130

Re: Como listar o último arquivo modificado de um diretório (e subs)

Cheguei a testar o comando

find . -name '*.pdf' -exec mv {} /home/du/Documents/revistas/up \;

dai ele me retornava todos resultados com pdf (e das subpastas) e movia tudo pra uma pasta... e dai depois nessa pasta eu checaria o ultimo por exemplo. mas n deu mto certo.


EDIT
acabei de fazer um teste
name=$(find . -type f -mtime -1 | tail -1)
echo $name

sim, deu certo que imprimiu o ultimo resultado... mas o problema q ele pegou num subdiretorio e o resultado foi por exemplo

teste/teste.txt

eu queria isolar SO o NOME do arquivo e nao o diretorio todo entendeu??

Como faço pra remover o diretorio me retornar SO NOME do arquivo?

agora eu acabei modificando mais na frente do codigo, ai acabei fazendo de um jeito que nao precisa remover o caminho.. mas gostaria de saber como funciona isso tbm... pra futuras modificacoes.

Última edição por beagle (25/09/2017 21:43:27)

Offline

#5 25/09/2017 22:56:16

swatquest
Moderador
Registrado: 05/10/2010
Mensagens: 1.949

Re: Como listar o último arquivo modificado de um diretório (e subs)

use o basename

basename $(find . -type f -mtime -1 | tail -1)

se for mais de um resultado, use a opção -a
por exemplo

basename -a $(find . -type f -mtime -1 | tail -10)

Última edição por swatquest (25/09/2017 22:58:08)

Offline

#6 25/09/2017 22:59:06

beagle
Membro
Registrado: 31/08/2015
Mensagens: 130

Re: Como listar o último arquivo modificado de um diretório (e subs)

Opa vou testar!

Eu tava vendo aqui pra rodar ele todos os dias.. achei o crontab.. da pra usar isso.
Unica duvida é se a maquina estiver desligada, se eu coloqueip  pra rodar um script as 10h.. se a maquina nao iver ligada, dai ele so roda no outro dia? o que acontece.

Offline

#7 25/09/2017 23:11:58

swatquest
Moderador
Registrado: 05/10/2010
Mensagens: 1.949

Re: Como listar o último arquivo modificado de um diretório (e subs)

Acho que a solucão é usar o comando at


você pode colocar também no autostart..

ao ligar roda

ou no profile /etc/profle.d

exemplo

criar um arquivo

touch teste.sh

At "
#!/bin/sh
basename $(find . -type f -mtime -1 | tail -1)

Offline

#8 26/09/2017 22:37:06

swatquest
Moderador
Registrado: 05/10/2010
Mensagens: 1.949

Re: Como listar o último arquivo modificado de um diretório (e subs)

use aspas para nomes com espaços

basename "$(find . -type f -mtime -1 | tail -1)"

Offline

#9 01/10/2017 03:46:08

beagle
Membro
Registrado: 31/08/2015
Mensagens: 130

Re: Como listar o último arquivo modificado de um diretório (e subs)

Usei o crontab aqui pra rodar o script todos dias as 20h, porem com a maquina desligada ele nao roda assim que ligar.. nao tem como arrumar isso? Se a maquina estiver off, assim que ligar executar?

Offline

#10 01/10/2017 21:43:44

swatquest
Moderador
Registrado: 05/10/2010
Mensagens: 1.949

Re: Como listar o último arquivo modificado de um diretório (e subs)

como disse antes veja o comando at e anacron

https://www.google.com.br/search?q=Sche … wASswLOoDQ

https://www.tecmint.com/cron-vs-anacron … -on-linux/

Última edição por swatquest (01/10/2017 21:48:36)

Offline

#11 02/10/2017 00:41:55

swatquest
Moderador
Registrado: 05/10/2010
Mensagens: 1.949

Re: Como listar o último arquivo modificado de um diretório (e subs)

com basename tem um erro se o nome do arquivo contém espaço
caso você use o apas dupla "", não funciona se você escolher 2 ou mais no comando tail

por exemplo
basename "$(find . -type f -mtime -1 | tail -10)"

só irá aparecer o último

para isso pode usar o awk

find . -type f -mtime -1 | tail -1 | awk  -F "/" '{print $NF}'

mostrará a última coluna com o delimitador /

Offline

#12 02/10/2017 03:00:34

beagle
Membro
Registrado: 31/08/2015
Mensagens: 130

Re: Como listar o último arquivo modificado de um diretório (e subs)

E ai! Eu vi aqui entao, tem que usar o anacron visto que o pc que eu preciso rodar o script é desligado!!

Vou pesquisar sobre isso..

Quanto ao comando to usando esse aqui

#!/bin/bash
name=$(ls -Art | tail -n 1)

esse dai eu to rodando no diretorio que eu quero, ai ele retorna o ultimo modificado!! Ta funcionadno blz, so preciso usar agora otal de anacron pra rodar automatico.. visto que o cron nao ta reoslvendo meu problema, pois desligo a maquina!

Offline

#13 02/10/2017 03:26:06

beagle
Membro
Registrado: 31/08/2015
Mensagens: 130

Re: Como listar o último arquivo modificado de um diretório (e subs)

Acabei de usar o comando at.

Fiz o teste
echo "shutdown -h now" | at -m 23:55
e realmente desligou a máquina. Adicionei 2 jobs, ele mostrou ali que tinha 2 jobs blz!

Dai a primeira vez ele desligou a maquina, OK.
Dai entao eu liguei a maquina novamente pra testar se a job2 que eu tinha configurado (pra desligar de novo deopis em 5min) iria funcionar, sim funcionou blz!

Mas agora vou pesquisar sobre o anacron, esse at nao entendi muito bem, consigo configurar pra ele rodar todos dias? Pelo que vi por alto aqui o anacron verifica o horario que eu configurei e se a maquina estava off ele executa a tarefa.. isso que quero.

Vou pesquisar durante a semana isso.
Em que diretorio e arquivo fica o arquivo anacron (ou o cron nao sei)
A configuracao pra executar todos dias o script as 20h, caso a maquina esteja off, assim que ligar executar.

Se voce puder me ajudar ja desde ja agradeco!! muito bom!

Offline

#14 02/10/2017 04:06:22

beagle
Membro
Registrado: 31/08/2015
Mensagens: 130

Re: Como listar o último arquivo modificado de um diretório (e subs)

Ola, resolvi testar aqui agora...

Me diga se fiz certo.
Fui ate o caminho /etc/anacrontab e abri ele pra editar.
Adicionei a linha

1    10    teste    /bin/bash /home/meuuser/scripts/script.sh | at -m 3:01

Resumindo, coloquei 1 pra ser diario e delay de 10min, pelo que eu entendi esses 10min eh quando a maquina ta off e ele identificar que nao rodou o script ainda, ele roda em 10min.

E o comando at entraria nessa linha do arquivo anacrontab. Informando a hora. Eh isso?
Se for, eu nao entendi uma coisa, como eu sei que vai rodar essa linha todos dias, esse anacrontab foi feito pra isso e a configuracao 1 ali indificaria que eh todos dias? Nao entendi muito bem se vc puder me esclarecer!!!


Eu testei o comando at e funfou direitinho no bash... agora dentro do anacrontab, eu nao sei. Eu fiz esse mesmo ccomando que funcionou no terminal eu boei ali no anacrontab!!!

Fico no aguardo muito obrigado desde ja!!

Offline

#15 02/10/2017 23:08:22

swatquest
Moderador
Registrado: 05/10/2010
Mensagens: 1.949

Re: Como listar o último arquivo modificado de um diretório (e subs)

foi mal pelo e, no caso a palavrea certa seria ou

nunca vi usando os dois ao mesmo tempo.

ou vc usa at ou usa anacron.

contudo se voc6e quer usar uma pacote que tem as funcionabilidades do cron e anacron use o fcron

https://www.ibm.com/developerworks/comm … 41?lang=en

Offline

Rodapé do site