따라서 이것은 작동합니다.
find /dir/ -type f -printf "%p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n" > /dir/output.txt
하지만 그렇지 않습니다:
ssh -o StrictHostKeyChecking=no "servername" find /dir/ -type f -printf "%p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n" > /dir/output.txt
ssh 명령을 실행하면 다음 오류가 발생합니다.
bash: %TY-%Tm-%Td: command not found
bash: %TH:%TM: command not found
bash: %s: command not found
bash: %u: command not found
bash: %Un: command not found
이 명령의 형식을 다시 지정하기 위해 누락된 특정 항목이 있습니까?
답변1
이 명령의 형식을 다시 지정하기 위해 누락된 특정 항목이 있습니까?
예. SSH를 통해 명령을 실행하면 한 수준의 참조가 손실됩니다. 그래서 이거:
find /dir/ -type f -printf "%p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n"
이 되다:
find /dir/ -type f -printf %p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n
이것은 함께 파이프로 연결되는 일련의 |
쉘 명령입니다( ). 전체 내용을 작은따옴표로 묶어 이 문제를 해결할 수 있습니다.
ssh -o StrictHostKeyChecking=no "servername" 'find /dir/ -type f -printf "%p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n"' > /dir/output.txt
또는 bash에 stdin으로 스크립트를 전달합니다.
ssh -o StrictHostKeyChecking=no "servername" bash <<EOF > /dir/output.txt
find /dir/ -type f -printf "%p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n"
EOF
답변2
엽서의 대답은... 다음과 같이 원래 명령의 접두사와 접미사를 작은따옴표로 묶는 것입니다.
ssh -o StrictHostKeyChecking=no "servername" 'find /dir/ -type f -printf "%p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n" > /dir/output.txt'