원격 서버에서 명령이 올바르게 실행되지 않습니다.

원격 서버에서 명령이 올바르게 실행되지 않습니다.

데이터가 로컬 디스크 대신 원격 서버에 저장되도록 백업 스크립트를 업데이트하려고 했습니다.

전체 스크립트를 성공적으로 변환했지만 마지막 부분에서는 n디렉토리에서 최신 파일을 제외한 모든 파일을 제거했습니다.

디버깅하고 이유를 알아보기 위해 일시적으로 모든 변수를 제거했습니다.

원격 컴퓨터에서 실행하려는 명령은 다음과 같습니다.

ls -tr1 /mnt/backup1tb/testarossa/test | tail -n +5 | xargs -d '\n' rm -f

이 명령을 실행하면 예상한 대로 작동합니다. 최신 4개의 파일(또는 디렉터리)을 남기고 나머지는 삭제합니다.

SSH를 통해 실행하려면 스크립트에 다음 줄이 있습니다.

foo=`ssh $remoteuser@$remoteaddr ls -tr1 /mnt/backup1tb/testarossa/test | tail -n +5 | xargs -d '\n' rm -f`

마지막 부분을 제거하려고 시도했는데 | xargs -d '\n' rm -f제거해야 할 파일의 디렉터리 목록이 반환되었습니다. 그러나 xarg 섹션을 추가해도 이러한 파일은 삭제되지 않습니다.

답변1

원격 서버에서 모든 명령을 실행하려면 원격 명령을 따옴표로 묶어야 합니다. 그렇지 않으면 localhost의 파이프 다음의 모든 항목을 실행하게 됩니다. 이는 사용자가 원하는 것이 아닙니다(주석에서 언급한 대로).

foo=`ssh $remoteuser@$remoteaddr "ls -tr1 /mnt/backup1tb/testarossa/test | tail -n +5 | xargs -d '\n' rm -f"`

관련 정보