Você parece ter misturado várias coisas.
set today = 'date +%Y'
se parece com a sintaxe tcsh, mas mesmo em tcsh ele atribui a string date +%Y
à variável today
, ele não executa o comando date
. Como você provavelmente está usando 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 :
today=$(date +%Y-%m-%d)
(Eu também completei a especificação da data). Você pode usar backquotes em vez de parênteses em dólar, mas é propenso a ficar visualmente confuso com aspas, e as regras para quando você precisa de cotações dentro de um comando backquoted são muito complexas e dependentes de implementação, então é melhor não ficar com $(…)
(que tem o mesmo efeito com uma sintaxe mais segura).
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 somente se o primeiro comando for bem sucedido.
today=$(date +%Y-%m-%d)
mkdir -p The_Logs &&
find …
Uma alternativa ao uso de &&
após cada comando é iniciar seu script com set -e
. Isso faz com que o shell pare de executar o script assim que qualquer comando retornar um status diferente de zero (exceto os comandos em if
conditions e alguns outros casos).
set -e
today=$(date +%Y-%m-%d)
mkdir -p The_Logs
find …
Seu comando find
está 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 com mkdir
e, em seguida, percorrendo-o imediatamente com find
. Isso não será útil, a menos que o diretório já exista. Você quis criar um diretório para os registros de hoje e mover os arquivos recentes de The_Logs
para um diretório chamado, por exemplo, The_Logs.2012-02-11
?
mkdir -p "The_Logs.$today"
find The_Logs -mtime -1 -exec mv {} "The_Logs.$today" \;
Ou você quis renomear os arquivos de log de hoje para adicionar o sufixo $today
? Isso requer o cálculo do nome de arquivo diferente para cada arquivo a ser movido.
find The_Logs -mtime -1 -exec sh -c 'mv "$0" "$0.$today"' {} \;
Observe que usei -mtime
para mover arquivos com base no tempo de modificação deles, e não em -atime
, que é a hora em que o arquivo foi lido pela última vez (se o seu sistema mantiver controle disso, o atime pode ser tão antigo quanto o mtime).