tente
mv $fname ./archive/$(basename $fname)-$(date +%Y%m%d-%T)
Aqui está o meu script que eu criei para transferir tipos particulares de arquivos de diretórios. Eu estou lutando para encontrar uma maneira de mover o arquivo para o diretório de arquivo com o carimbo de hora atual.
#!/bin/bash
SERVER='abc.com'
USER='xyz'
PASSWD='lddkdkdkas'
find /directory/ -name ABC002*.csv | while read fname
do
scp $fname [email protected]:~/XYZ/
mv $fname ./archive/
done
Aqui posso mover o arquivo para arquivar, mas não consigo movê-lo com o nome alterado para nome do arquivo * timestamp.
Tente:
mv $fname /tmp/'basename $fname'-'date +%Y%m%d_%H%M'
Você pode usar variações deste tema se preferir carimbos de data / hora ou nomes de arquivos diferentes. Esteja ciente de que esta solução não é robusta o suficiente para lidar com vários nomes de arquivos.
Adicione um nome de base à resposta da Warner:
mv $fname ./archive/'basename $fname'-'date +%Y%m%d_%H%M'
Tente isso
mv $fname ./archive/'date +%m%d%y-%T'-$fname
Existem backticks únicos à frente e depois de T Eles não aparecem no post por algum motivo
Pode ser necessário usar o comando basename
para remover o caminho completo do arquivo.
Além disso, você pode querer usar uma matriz para gerar uma lista de arquivos para mover mais tarde; ou até mesmo usar a opção -exec
de find
, algo como:
find /dir -iname BLAH -exec sh -c 'new_name=$(basename {}); scp {} user@host:dest/ && mv {} /archive/$new_name$(date..)' \;
(não esqueça o \;
no final)
Essa linha arquiva o arquivo somente após ( &&
) uma cópia bem-sucedida sobre o ssh.
Outra dica: talvez você queira tar
dos arquivos e enviar um arquivo compactado pela rede? Isso pode economizar o tempo de handshake do ssh (e usar chaves ssh! Não salve senhas em scripts que você vai deixar por aí!)
Tags bash exchange-migration