Verificando se existem arquivos em algumas pastas remotas com o bash

0

Eu preciso fazer um script para procurar em algumas pastas e enviar um email se houver arquivos nessas pastas.
Eu tentei fazer algo assim, mas eu recebo erros com a variável de comando e impressão da pasta.

for folder in "FOLDER1" "FOLDER2";  do
  command='ssh -q user@host "ls /usr/local/username/'{print $folder}' | wc -l"'
  #echo $command

  if [ $command -ne '0' ]
  then
    #send error email 
  fi
done
    
por simone 17.05.2012 / 11:33

2 respostas

2

Você deve tentar:

command=$(ssh -q user@host 'ls "/usr/local/username/'$folder'" | wc -l')

Você não pode realmente aninhar backticks (e eu não sei por que você quis fazer isso de qualquer maneira).

    
por 17.05.2012 / 11:51
2

Isso pode ser muito mais simples. Eu não tenho idéia do que você está tentando fazer com {print $folder} : as chaves não fazem sentido aqui, e se você está tentando incluir $folder na string, você escreveria apenas $folder . Você não deve analisar a saída de ls , é muito raramente útil e muitas vezes falha.

if ! ssh user@host "test -e '/usr/local/username/$folder'"; then
  # the file doesn't exist

Observe que o nome do arquivo deve ser citado para o shell remoto. Eu principalmente cuidei disso no meu comando acima, cercando o nome do arquivo no comando remoto com aspas simples, mas isso só funciona se $folder em si não contiver nenhuma aspas simples. Se o seu shell local é bash, ksh93 ou zsh, use isso para citar qualquer citação simples:

q=\'\\'\'
if ! ssh user@host "[ -d '/usr/local/username/${folder//\'/$q}' ]"; then

Outra abordagem que geralmente é mais conveniente é montar o sistema de arquivos remoto com sshfs e trabalhar nele através do sistema de arquivos normal. interface. Eu recomendo isso, a menos que você esteja trabalhando com muitos servidores remotos ao mesmo tempo.

mkdir /path/to/mount/point
sshfs user@host /path/to/mount/point
if ! [ -d "/usr/local/username/$folder" ]; then
    
por 18.05.2012 / 03:35

Tags