Teste de diretorio vazio por ssh

1. Teste de diretorio vazio por ssh

Awerik Carlesso
awerik

(usa Debian)

Enviado em 21/03/2023 - 14:07h


Olá,
estou tentando ajustar um script para a sincronização de arquivos entre servidores.
Em um momento, eu preciso verificar se um diretório no server 2 está vazio ou com arquivos para iniciar o rsync.

Estou usando o seguinte código para teste.

if [ "$(ssh root@meuIP ls -A /data/teste/transfer/ 2>/dev/null)" == "" ]; then echo "VAZIO"; else echo "CONTEM ARQUIVOS"; fi
Ele funciona como linha única direta no shell, mas quando coloco ele dentro do script ele não funciona.

CÓDIGO:
Declaracao das variaveis bla bla

if [ "$(ssh $server2 ls -A $DIR_ 2>/dev/null)" == "" ]; then
rsync --dry-run --remove-source-files -avzrh "$SRV_PRD2":"$DIR_PRD2" "$DIR_PRD1"

SAIDA:
root@server1:~# sh -x /data/teste/s5.sh
+ ssh root@ip ls -A /data/teste/transfer/
+ [ == ]
/data/teste/s5.sh: 35: [: unexpected operator
+ exit 0

Podem me ajudar a entender o erro?

Obrigado


  


2. Re: Teste de diretorio vazio por ssh

Daniel Lara Souza
danniel-lara

(usa Fedora)

Enviado em 21/03/2023 - 14:35h

Teste o exemplo aqui




#!/bin/bash

DIR=/opt

$DIR 2> /dev/null

if [ $? -ne 0 ]; then
echo "Diretorio vazio!"
else
echo "Ha conteudo no diretorio!"
fi






3. Re: Teste de diretorio vazio por ssh

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 21/03/2023 - 23:26h


awerik escreveu:


Olá,
estou tentando ajustar um script para a sincronização de arquivos entre servidores.
Em um momento, eu preciso verificar se um diretório no server 2 está vazio ou com arquivos para iniciar o rsync.

Estou usando o seguinte código para teste.

if [ "$(ssh root@meuIP ls -A /data/teste/transfer/ 2>/dev/null)" == "" ]; then echo "VAZIO"; else echo "CONTEM ARQUIVOS"; fi
Ele funciona como linha única direta no shell, mas quando coloco ele dentro do script ele não funciona.

CÓDIGO:
Declaracao das variaveis bla bla

if [ "$(ssh $server2 ls -A $DIR_ 2>/dev/null)" == "" ]; then
rsync --dry-run --remove-source-files -avzrh "$SRV_PRD2":"$DIR_PRD2" "$DIR_PRD1"

SAIDA:
root@server1:~# sh -x /data/teste/s5.sh
+ ssh root@ip ls -A /data/teste/transfer/
+ [ == ]
/data/teste/s5.sh: 35: [: unexpected operator
+ exit 0

Podem me ajudar a entender o erro?
Obrigado


Boa noite awerik.
Acredito que o erro ocorre devido ao seguinte:
[ "$(ssh root@meuIP ls -A /data/teste/transfer/ 2>/dev/null)" == "" ] && echo "VAZIO" || echo "CONTEM ARQUIVOS"
"$(ssh root@meuIP ls -A /data/teste/transfer/ 2>/dev/null)"
O acesso e o comando estão em uma sub-shell, e a "Saída" separada.
______________________________________________________________________

Sugestão:
RESP=$(ssh root@meuIP [[ "$(find /data/teste/transfer/ -empty)" ]] && echo "VAZIO" || echo "NÃO_VAZIO")
echo "${RESP}"
______________________________________________________________________
Outra,
para evitar a execução do find em uma sub_shell:
RESP=$(ssh root@meuIP find /data/teste/transfer/ -empty|grep -q ".*" && echo "VAZIO" || echo "NÃO_VAZIO")
find /home/adminq/img_slide/ -empty|grep -q '.*' && echo VAZIO || echo NAO_VAZIO
echo "${RESP}"
______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



4. Re: Teste de diretorio vazio por ssh

Awerik Carlesso
awerik

(usa Debian)

Enviado em 22/03/2023 - 10:33h

Obrigado a todos.

Consegui desta forma:

if [ "$(ssh root@IP ls -A $DIR_SYNC_QLD 2>/dev/null)" = "" ];
then
RESP="1";
else
RESP="2";
fi



msoliver escreveu:


awerik escreveu:


Olá,
estou tentando ajustar um script para a sincronização de arquivos entre servidores.
Em um momento, eu preciso verificar se um diretório no server 2 está vazio ou com arquivos para iniciar o rsync.

Estou usando o seguinte código para teste.

if [ "$(ssh root@meuIP ls -A /data/teste/transfer/ 2>/dev/null)" == "" ]; then echo "VAZIO"; else echo "CONTEM ARQUIVOS"; fi
Ele funciona como linha única direta no shell, mas quando coloco ele dentro do script ele não funciona.

CÓDIGO:
Declaracao das variaveis bla bla

if [ "$(ssh $server2 ls -A $DIR_ 2>/dev/null)" == "" ]; then
rsync --dry-run --remove-source-files -avzrh "$SRV_PRD2":"$DIR_PRD2" "$DIR_PRD1"

SAIDA:
root@server1:~# sh -x /data/teste/s5.sh
+ ssh root@ip ls -A /data/teste/transfer/
+ [ == ]
/data/teste/s5.sh: 35: [: unexpected operator
+ exit 0

Podem me ajudar a entender o erro?
Obrigado


Boa noite awerik.
Acredito que o erro ocorre devido ao seguinte:
[ "$(ssh root@meuIP ls -A /data/teste/transfer/ 2>/dev/null)" == "" ] && echo "VAZIO" || echo "CONTEM ARQUIVOS"
"$(ssh root@meuIP ls -A /data/teste/transfer/ 2>/dev/null)"
O acesso e o comando estão em uma sub-shell, e a "Saída" separada.
______________________________________________________________________

Sugestão:
RESP=$(ssh root@meuIP [[ "$(find /data/teste/transfer/ -empty)" ]] && echo "VAZIO" || echo "NÃO_VAZIO")
echo "${RESP}"
______________________________________________________________________
Outra,
para evitar a execução do find em uma sub_shell:
RESP=$(ssh root@meuIP find /data/teste/transfer/ -empty|grep -q ".*" && echo "VAZIO" || echo "NÃO_VAZIO")
find /home/adminq/img_slide/ -empty|grep -q '.*' && echo VAZIO || echo NAO_VAZIO
echo "${RESP}"
______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________









Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts