Ist es möglich, dies zu tun:
ssh user@socket command /path/to/file/on/local/machine
Das heißt, ich möchte einen Remote-Befehl mit einer lokalen Datei in einem Schritt ausführen, ohne scp
die Datei zuvor mit zu kopieren.
Ist es möglich, dies zu tun:
ssh user@socket command /path/to/file/on/local/machine
Das heißt, ich möchte einen Remote-Befehl mit einer lokalen Datei in einem Schritt ausführen, ohne scp
die Datei zuvor mit zu kopieren.
Antworten:
Du hast nur ein Symbol verpasst =)
ssh user@socket command < /path/to/file/on/local/machine
scp
vorher mit kopieren .
/dev/stdin
oder zu geben -
. Kann oder kann nicht funktionieren ( /dev/stdin
ist eine Datei, aber die Suche wird fehlschlagen)
Eine Möglichkeit, die unabhängig vom Befehl funktioniert, besteht darin, die Datei über ein Remote-Dateisystem auf dem Remote-Computer verfügbar zu machen. Da Sie eine SSH-Verbindung haben:
# 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
Alternativ zur bash
Prozessersetzung <(cat -)
oder < <(xargs -0 -n 1000 cat)
(siehe unten) können Sie einfach den Inhalt der angegebenen Dateien verwenden xargs
und cat
weiterleiten wc -l
(was portabler ist).
# 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)"'