diff로 파이프 할 수 없습니까?


74

먼저 수동으로 다운로드하지 않고 영리하고 원격 파일을 로컬 파일과 비교하고 싶었습니다. 원격 파일의 내용을 얻을 수 있습니다

ssh user@remote-host "cat path/file.name"

그러나 배관 diff

ssh user@remote-host "cat path/file.name" | diff path/file.name

나에게 이것을 준다 :

diff: missing operand after `path/file.nae'
diff: Try `diff --help' for more information.

ssh 키가 설정되어 있으므로 암호를 묻는 메시지가 표시되지 않습니다. 이에 대한 해결 방법은 무엇입니까?


5
그건 그렇고, 파일을 다운로드 할 때 여전히 파일을 다운로드하고 있습니다 (SSH 연결을 통해 내용이 전송되기 때문에) 어디서나 파일을 저장하지 않습니다. 따라서 대역폭이나 다른 것을 저장하는 것과는 다릅니다.
David Z

2
네, 원샷 파일이 걸려있는 파일 시스템을 정리하고 싶지 않습니다.
user394

1
명령이 stdin을 지원하지 않는 경우 (예 : via -),을 사용할 수 있습니다 /dev/stdin. 예diff file1 /dev/stdin
ctrl-alt-delor

답변:


92

-표준 입력을 나타내는 데 사용하십시오 .

ssh user@remote-host "cat path/file.name" | diff path/file.name -


큰 파일 (예 : 리눅스 디스크 이미지)을 비교할 때 콘솔에 모두 출력됩니다! diff -s ( "같은")에서도 마찬가지입니다.
user391339

65

해결 방법은 다음과 diff같습니다. <( expr )을 인수 로 받아들이는 것 같습니다 .

diff <(ssh \"cat path/file.name/") <(cat path/file.name)

17
(가 제공해야 즉 그것은 쉘 (bash는, KSH 및 zsh을 지원 구문하지만, POSIX 아니다) 커널의 도움으로, DIFF 아니다 /dev/fd: diff같은 것을보고 /dev/fd/3그 명령 줄에서).
Gilles

3
쉘은이 기능을 위해 임시 명명 된 파이프를 생성 할 수도 있습니다.
ephemient

3
이것은 가장 멋진 답변입니다!
neves dec

6
나는 개인적 으로이 대답을 선호합니다. 두 개의 서로 다른 XML 파일을 비교해야했습니다. 그러나 그들은 먼저 제대로 형성되어야했습니다. 이로 인해 diff -y <(xmllint --format "${1}") <(xmllint --format "${2}")나는 항상 사용합니다.
Paul Nelson Baker

이것은 또한 이진 .plist 파일 두 개를 비교할 수있는 OS X에서 매우 유용합니다.diff <(plutil -convert xml1 -o -- "${1}") <(plutil -convert xml1 -o - -- "${2}")
morgant

4

diff로 배관하는 것은 달리기와 같습니다.

diff path/file.name

그런 다음 일단 실행되면 파일의 전체 내용을 입력하십시오.

보시다시피, 그것은 당신이 기대 한 것이 아닙니다.


해결 방법이 없습니까? :(
user394

1
Hemant의 대답을보십시오. 나는 하나도 몰랐다.
Macha

1
diff /tmp/localtempfile <(ssh -A -o StrictHostKeyChecking=no root@server "cat /tmp/remotetempfile")

보안을 낮추는 것은 무엇입니까 StrictHostKeyChecking=no? 그렇지 않으면 좋은 대답입니다.
ctrl-alt-delor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.