이것이 가능합니까?
ssh user@socket command /path/to/file/on/local/machine
즉, 복사된 파일을 먼저 사용하는 것이 아니라 로컬 파일을 사용하여 한 번에 원격 명령을 실행하고 싶습니다 scp
.
답변1
기호 하나만 놓쳤습니다 =)
ssh user@socket command < /path/to/file/on/local/machine
답변2
명령에 관계없이 효과적인 방법 중 하나는 원격 파일 시스템을 통해 원격 컴퓨터에서 파일을 사용할 수 있도록 만드는 것입니다. SSH 연결이 있으므로:
- 역방향 SSH 터널 설정. 당신은 또한 볼 수 있습니다파일을 로컬 시스템에 쉽게 복사하는 SSH
- 원격 컴퓨터에서 공유하려는 파일이 포함된 컴퓨터의 디렉터리 트리를 마운트합니다.SSHFS. (예)
답변3
# What if remote command can only take a file argument and not read from stdin? (1_CR)
ssh user@socket command < /path/to/file/on/local/machine
...
cat test.file | ssh user@machine 'bash -c "wc -l <(cat -)"' # 1_CR
bash
프로세스 교체 <(cat -)
또는 (아래 참조) < <(xargs -0 -n 1000 cat)
에 대한 대안 으로 지정된 파일의 내용을 사용 xargs
하고 파이프할 수 있습니다 (더 이식성이 뛰어남).cat
wc -l
# Assuming that test.file contains file paths each delimited by an ASCII NUL character \0
# and that we are to count all those lines in all those files (provided by test.file).
#find . -type f -print0 > test.file
# test with repeated line count of ~/.bash_history file
for n in {1..1000}; do printf '%s\000' "${HOME}/.bash_history"; done > test.file
# xargs & cat
ssh localhost 'export LC_ALL=C; xargs -0 -n 1000 cat | wc -l' <test.file
# Bash process substitution
cat test.file | ssh localhost 'bash -c "export LC_ALL=C; wc -l < <(xargs -0 -n 1000 cat)"'