Bash를 사용하여 일부 원격 폴더에 파일이 있는지 확인하십시오.

Bash를 사용하여 일부 원격 폴더에 파일이 있는지 확인하십시오.

특정 폴더를 조사하여 해당 폴더에 파일이 있을 때 이메일을 보내는 스크립트를 작성해야 합니다.
비슷한 작업을 시도했지만 명령 변수 및 폴더 인쇄에 오류가 발생합니다.

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

답변1

다음을 시도해 보세요.

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

실제로 역따옴표를 중첩할 수는 없습니다(그리고 왜 그렇게 하는지 모르겠습니다).

답변2

이것은 훨씬 간단할 수 있습니다. 무엇을 하려는지 모르겠습니다 {print $folder}. 여기서 중괄호는 의미가 없습니다. $folder문자열에 포함시키려는 경우 $folder.출력을 구문 분석하면 안 됩니다.ls, 거의 작동하지 않으며 종종 실패합니다.

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

원격 셸에서는 파일 이름을 따옴표로 묶어야 합니다. 저는 위 명령에서 원격 명령의 파일 이름을 작은 따옴표로 묶어서 이 문제를 대부분 해결했지만, 이는 $folder작은 따옴표 자체가 포함되지 않은 경우에만 작동합니다. 로컬 셸이 bash, ksh93 또는 zsh인 경우 대신 작은따옴표와 함께 사용하세요.

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

더 편리한 또 다른 방법은 다음을 사용하여 원격 파일 시스템을 마운트하는 것입니다.sshfs일반 파일 시스템 인터페이스를 통해 처리합니다. 동시에 많은 원격 서버를 사용하지 않는 한 이 방법을 권장합니다.

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

관련 정보