でファイルを転送するときにソート順を指定できるかどうか疑問に思っていますscp
。
例えば:
$ scp -r "user@host:/path/to/download/" .
[... files download in a seemingly random order ...]
これはおそらくscp
機能に関連している可能性があるので、たとえばファイル名の昇順でファイルが転送されるようにソース(サーバー)側でsshを構成する方法はありますか?
でファイルを転送するときにソート順を指定できるかどうか疑問に思っていますscp
。
例えば:
$ scp -r "user@host:/path/to/download/" .
[... files download in a seemingly random order ...]
これはおそらくscp
機能に関連している可能性があるので、たとえばファイル名の昇順でファイルが転送されるようにソース(サーバー)側でsshを構成する方法はありますか?
回答:
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
それぞれのファイルのメタデータとコンテンツの両方を送信し、それらは単に異なる「プロトコル」を使用します。結果を繰り返し処理できると思いますが、名前に空白が含まれているファイルに注意する必要があります。