私はLinuxの初心者ユーザーであり、あるコンピューターから別のコンピューターにファイルの長いリストを送信しようとしています。引数リストが長すぎるので、findを使用しています。しかし、式の設定に問題があります。誰か助けてもらえますか?
これが私が通常短い引数リストに入力するものです。
scp ./* phogan@computer/directory...
これはfindに変換されると思います。
scp find . -name "*" phogan@computer/directory...
多分私は配管を使うことができますか?どんな提案も役立ちます。前もって感謝します。
find . -name "*" -exec scp '{}' phogan@computer:/directory ';'
通常すべてのファイルを1つの巨大なblobにまとめて「tar」し、「scp」を1回だけ呼び出します。このようなもの:
tar czfv - file1 file2 dir1 dir2 | ssh phogan@computer/ tar xvzf - -C directory
1つのコマンドscp
でそれを行うことができます。
scp
の新しいバージョンの場合:scp `find <path> -name <expression>` user@Host:<path_where_to_copy>
scp --exec=`find <path> -name <expression>` user@Host:<path_where_to_copy>
find
コマンドをbackticks`の間に必ずカプセル化し、一重引用符ではなく'。
for f in `find . -name "*"`;do scp $f phogan@computer/directory;done
私は提案します
find . -print0 | tar --null --files-from=/dev/stdin -cf - | ssh phogan@computer tar -xf - -C /directory
このソリューションでは、コマンドライン引数として解釈される可能性のあるファイル名がコマンドラインに表示されないようにすることに注意してください。
ファイル名にスペースが含まれている可能性があることにも注意してください。これは、bashのforループでファイル名のリストに問題が発生する可能性があることを意味します。