Isso pode ser facilmente alcançado com um loop
for f in *.db
do
scp "$f" user@host:/dir/"${f%.db}"_1.db
done
A construção ${f%.db}
retira o sufixo .db
de $f
.
Estou enviando arquivos de um servidor para outro usando scp. Eu preciso renomear arquivos depois de enviar isso. Então eu uso o seguinte comando para cada arquivo
scp original-hc.db user@host:/dir/original-hc_1.db
Eu quero enviar todos os arquivos usando um único comando com a renomeação de arquivos. Como
scp *.db user@host:/dir/(actual file name before extension)_1.db
scp
não pode renomear arquivos, portanto, você precisará usar outra ferramenta ou alternativa.
Se você tiver acesso SFTP e não apenas acesso SCP, poderá usar SSHFS para exibir os arquivos remotos sua máquina local. Isso permite que você use qualquer ferramenta de cópia e renomeação de arquivos.
mkdir mnt
sshfs user@host:/dir
pax -rw -pe -s'/\.db$/_1.db/' *.db mnt
fusermount -u mnt
Em vez de pax
(que é POSIX mas às vezes não é instalado por padrão no Linux embora esteja sempre disponível como pacote), você pode usar o GNU ou o BSD, zsh zcp
, etc. Ou apenas um loop que faz a cópia:
for x in *.db; do
cp -p "$x" "mnt/${x%.db}_1.db"
done
Você pode usar o método loop mesmo se você não tiver SSHFS, mas você tem que usar scp
no loop.
for x in *.db; do
scp -p "$x" "user@host:/dir/${x%.db}_1.db"
done
A configuração de uma conexão SSH para cada vez pode ser um pouco lenta. Com o OpenSSH, você pode abrir a conexão uma vez e, em seguida, pegar carona nela. Consulte Como usar um canal SSH já estabelecido
Outro método (que requer acesso total ao shell no servidor) é arquivar os arquivos e copiar o arquivo, e aplicar uma etapa de renomeação ao arquivar ou ao extrair. Por exemplo, se você tem o GNU tar localmente (o que é sempre o caso do Linux não embutido e frequentemente disponível, talvez como gtar
, em outras variantes unix):
tar -cf - --transform '/\.db$/_1.db/ *.db | ssh user@host 'cd /dir && tar -xf -'
Com o tar do BSD, substitua --transform
por -s
. Se você tem um tar muito limitado localmente, mas o tar GNU ou o BSD tar no servidor, você pode fazer a renomeação no lado do servidor.
Você pode querer inserir uma etapa de compactação se a largura de banda da rede for o gargalo. Com o método de arquivamento, você pode inserir etapas no pipeline:
tar -czf - --transform '/\.db$/_1.db/ *.db | ssh user@host 'cd /dir && gunzip | tar -xf -'
Ou você pode fazer a compactação no nível do SSH, passando a opção -C
para ssh
, sshfs
ou scp
.
Tags rename scp shell-script