Estou tentando acrescentar a data atual ao final de um nome de arquivo como este:
TheFile.log.2012-02-11
Aqui está o que eu tenho até agora:
set today = 'date +%Y'
mkdir -p The_Logs &
find . -name The_Logs -atime -1 -type d -exec mv \{} "The_Logs_+$today" \; &
No entanto, tudo o que recebo é o nome do arquivo e ele não acrescenta nada. Como anexar uma data atual a um nome de arquivo?
:
-la, pois ela será lida como um host no rsync e scp. stackoverflow.com/a/37143274/390066Respostas:
Muito provavelmente é o seu uso
set
. Isso atribuirá 'today', '=' e a saída dodate
programa aos parâmetros posicionais (também conhecidos como argumentos da linha de comando). Você deseja apenas usar o shell C (que você está chamando de "bash", provavelmente não));Observe a falta de espaços ao redor do sinal de igual.
Você também não deseja usar
&
no final de suas declarações; o que faz com que o shell não espere o comando terminar. Especialmente quando um depende do próximo. Ofind
comando pode falhar porque é iniciado antes domkdir
.fonte
Script Bash para injetar uma data em um nome de arquivo:
Este código bash no arquivo chamado
a.sh
Quando executado, imprime:
Explicação do código:
Interprete o script com o interpretador / bin / bash. Faça uma nova variável chamada hoje. Execute o comando date, passando os sinalizadores Y, m, d, H, M, S para configurar a saída. Coloque o resultado na variável de data.
Crie uma nova variável chamada filename, coloque a variável $ today com o restante do texto estático do nome do arquivo. em seguida, faça eco do nome do arquivo na tela.
Coloque-o em uma linha para aumentar a quantidade de lulz:
fonte
Você parece ter misturado várias coisas.
set today = 'date +%Y'
parece com a sintaxe do tcsh, mas mesmo no tcsh atribui a stringdate +%Y
à variáveltoday
, ele não executa odate
comando. Como você provavelmente está usando o bash ou algum outro shell POSIX, a sintaxe de uma atribuição étoday=some_value
(sem espaços ao redor do sinal de igual). Para executar o comando e atribuir sua saída à variável, use a substituição de comando :(Também completei a especificação da data). Você pode usar aspas duplas em vez de parênteses em dólar, mas é propenso a ser visualmente confundido com aspas diretas, e as regras para quando você precisar de aspas dentro de um comando aspas são bastante complexas e dependentes da implementação, por isso é melhor não seguir
$(…)
( tem o mesmo efeito com uma sintaxe mais saudável).Você usou
&
no final de vários comandos. Isso faz com que o comando seja executado em segundo plano, o que não é desejado aqui. Eu suspeito que você quis dizer&&
, o que significa executar o próximo comando apenas se o primeiro comando tiver êxito.Uma alternativa ao uso
&&
após cada comando é iniciar seu scriptset -e
. Isso indica ao shell para parar de executar o script assim que qualquer comando retornar um status diferente de zero (exceto para comandos emif
condições e em alguns outros casos).Seu
find
comando é bom, mas provavelmente não faz o que você pretende fazer (embora eu não saiba ao certo o que é isso).Você está criando um diretório
mkdir
e, em seguida, atravessando-o imediatamentefind
. Isso não será útil a menos que o diretório já exista. Você queria criar um diretório para os logs de hoje e mover arquivos recentes deThe_Logs
para um diretório chamado, por exemploThe_Logs.2012-02-11
?Ou você quis renomear os arquivos de log de hoje para adicionar o sufixo
$today
? Isso requer o cálculo do nome do arquivo diferente para cada arquivo a ser movido.Observe que eu usei
-mtime
para mover arquivos com base no tempo de modificação, e não-atime
, que é a hora em que o arquivo foi lido pela última vez (se o seu sistema acompanhar isso - se não o fizer, o atime pode estar no mesmo nível do arquivo). mtime).fonte
Você pode renomear o arquivo com carimbo de data / hora anexado a ele
fonte
Este:
Deveria trabalhar. Embora, pareça que você esteja usando o csh, e minha solução para remover o sinal + pode não funcionar para você, mas não fará mal tentar. Colocar sua variável entre {} colchetes, sempre é uma boa idéia para evitar expansões inesperadas de variáveis.
fonte