Estou escrevendo um script para criar backups de uma pasta e seu conteúdo. Há um prompt para o usuário inserir o nome da pasta a ser copiada. As cópias de backup devem ser nomeadas usando esta convenção: original foldername_date e hora de qualquer arquivo que foi modificado pela última vez na pasta . O script faz a cópia bem, mas estou preso em como extrair a data e hora do último arquivo modificado.
Aqui está um exemplo:
- o usuário insere Documents/Graphite no prompt para que a pasta Graphite e seu conteúdo sejam copiados
- dentro da pasta Graphite existem arquivos mais várias subpastas contendo arquivos
- o arquivo modificado mais recentemente dentro da pasta Graphite e suas subpastas é chamado index.js, localizado na subpasta services, e tem um carimbo de data/hora de 28/01/2020 14:28:54
Para o exemplo descrito acima, quando o arquivo O script executa duas coisas que precisam acontecer:
a) o terminal gera o seguinte para o arquivo modificado mais recentemente: b) a data e o carimbo de data e hora da última modificação do
2020-01-28 14:28:54 ./services/index.js
arquivo services/index.js são armazenados em uma variável neste formato.2020-01-28_14-28-54
armazenar a data/hora em uma variável é que ela será usada para modificar o nome da pasta copiada.
A resposta nesta postagem de @Heppo em 16/09/2011 às 18:21 recomenda isso para um caso de uso semelhante:
#!/bin/bash
find $1 -type f -print0 | xargs -0 stat --format '%Y :%y %n' | sort -nr | cut -d: -f2- | head
O que se aproxima do requisito a) acima, exceto que exibe mais de 1 arquivo e o formato do carimbo de data/hora é diferente. Apesar de conectar o comando ao explainshell.com, não tenho certeza de como alterá-lo para atender ao requisito a).
Qualquer orientação sobre como obter as informações para esses dois requisitos seria apreciada, pois sou novo no Linux.
Como você está usando o Ubuntu e tem o GNU
find
disponível, você pode imprimir a data de modificação mais recente usando a-printf
opção .produziria algo como
Infelizmente, você teria que retirar a parte fracionária dos segundos, pois não há opção de imprimir os segundos sem ela.