SCP再帰ファイル転送順序


11

でファイルを転送するときにソート順を指定できるかどうか疑問に思っていますscp

例えば: $ scp -r "user@host:/path/to/download/" .

[... files download in a seemingly random order ...]

これはおそらくscp機能に関連している可能性があるので、たとえばファイル名の昇順でファイルが転送されるようにソース(サーバー)側でsshを構成する方法はありますか?

回答:


4

tarとのパイプ透過性の問題を解決しsshます。以下に例を示しますbar。リモートPCの名前はです。テストの前に、を/tmp/foo実行して3つの空のファイルを作成しましたssh bar 'mkdir /tmp/foo ; touch /tmp/foo/{a,b,c}'

$ ssh bar 'cd /tmp/foo ; ls | sort -r | tar -cT -' | tar -xv
c
b
a
$ ls -l a b c
-rw-r--r-- 1 dnet dnet 0 nov   29 17:07 a
-rw-r--r-- 1 dnet dnet 0 nov   29 17:07 b
-rw-r--r-- 1 dnet dnet 0 nov   29 17:07 c

-Tフラグtarになり、それが次のパラメータからパックするファイル名を読み、-標準入力を意味します。ここで、ファイルの名前をそこにパイプする必要があります。これは、ls(例のように)から、またはfindよりトリッキーなタスクから取得できます。この設定では、を使用sortして、SSHを介してファイルが送信される正確な順序を指定できます(この場合は、-rファイルをアルファベットの逆順に並べ替えます)。-vのみ開梱、最終的に添加されるtar順番が表示され、その結果、。


わあ、すばらしい低レベルのアプローチであり、全体像をはっきりと示しています。ありがとうございました。
ドミトリー・ミンコフスキー

アーカイブではなく個別にファイルを転送するために、そのようなアプローチをどのように拡張できるでしょうか?リモートコマンドの結果をループするループsortは、barどういうわけかこれを達成しますか?
ドミトリー・ミンコフスキー

かもしれませんが、それをアーカイブとして転送することに問題があるとは思いません。考えてみれば、このアプローチとそれほど大きな違いはありません。scpそれぞれのファイルのメタデータとコンテンツの両方を送信し、それらは単に異なる「プロトコル」を使用します。結果を繰り返し処理できると思いますが、名前に空白が含まれているファイルに注意する必要があります。
dnet

2
@dimadima、あなたが答えをとても好きなら、おそらくあなたは答えを受け入れることができます
PeterV.Mørch、2015年

この答えは機能しますが、ファイルの名前にスペースが含まれている場合に合わせて調整する必要があります。
Ruslan

1

以下を使用して、アルファベット順のファイル転送を実現できますrsync

rsync -P -e ssh -r user@remote_host:/some_path local_path

P部分的なダウンロードを許可しe、SSHプロトコルを設定し、r再帰的にダウンロードします。


0

これが誰かを助ける場合、私はここに簡単な解決策を提供しました:

/programming/23067175

それを行うための賢い方法をまだ待っています!


1
これは単なるリンクです。完全な回答を得るには、ここに回答を入力してから、参照用のリンクを入力してください。
Kevin Panko
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.