원격 명령을 실행하고 로컬 파일을 입력으로 전달하는 방법은 무엇입니까?

원격 명령을 실행하고 로컬 파일을 입력으로 전달하는 방법은 무엇입니까?

이것이 가능합니까?

ssh user@socket command /path/to/file/on/local/machine

즉, 복사된 파일을 먼저 사용하는 것이 아니라 로컬 파일을 사용하여 한 번에 원격 명령을 실행하고 싶습니다 scp.

답변1

기호 하나만 놓쳤습니다 =)

ssh user@socket command < /path/to/file/on/local/machine

답변2

명령에 관계없이 효과적인 방법 중 하나는 원격 파일 시스템을 통해 원격 컴퓨터에서 파일을 사용할 수 있도록 만드는 것입니다. SSH 연결이 있으므로:

  1. 역방향 SSH 터널 설정. 당신은 또한 볼 수 있습니다파일을 로컬 시스템에 쉽게 복사하는 SSH
  2. 원격 컴퓨터에서 공유하려는 파일이 포함된 컴퓨터의 디렉터리 트리를 마운트합니다.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하고 파이프할 수 있습니다 (더 이식성이 뛰어남).catwc -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)"'

관련 정보