Liste todos os arquivos e execute o script com parte do nome do arquivo

3

Estou procurando listar todos os arquivos em uma pasta:

ABC123.cfg
XYZ456.cfg
EFG999.cfg

Os nomes dos arquivos, sem o .cfg , referem-se a um nome de servidor remoto, ABC123 etc.

Eu quero copiar alguns arquivos para cada um dos servidores remotos.

Então, procure os nomes dos arquivos, mas pegue o nome sem o .cfg . Então

scp filename.txt username@ABC123:/home/username/

Para cada servidor remoto, sobrescrevendo o arquivo de destino, se existir.

Cada servidor remoto usa o mesmo nome de usuário e senha. Posso usar uma senha no comando scp ?

    
por Preston Cole 02.12.2017 / 14:29

1 resposta

4

Isso deve fazer o trabalho:

#!/bin/bash
for i in *.cfg; do
  sshpass -f /path/to/passwordfile scp ${i%.cfg}.txt username@${i%.cfg}:
done

ou melhor

for i in *.cfg;do sshpass -f /path/to/passwordfile scp ${i%.cfg}.txt username@${i%.cfg}:;done

A senha é passada para scp usando sshpass (seguindo Como passar password to scp? ) que lê a partir de passwordfile - lembre-se de proteger este arquivo contra acesso de leitura não autorizado com chmod 400 !

Eu fiquei um pouco confuso com o arquivo que você quer enviar aqui, eu entendi que existe um arquivo ABC123.txt que tem que ser enviado para hospedar ABC123 , então eu apenas tirei .cfg usando Expansão do Parâmetro Bash e adicionou .txt .

Como user@host: é o diretório inicial do user , eu removi o caminho.

    
por dessert 02.12.2017 / 14:40