このコード行があります
scp -r ${server}:${server_dir}/$(ssh ${server} "ls -t ${server_dir} | head -5") logs/ios
実行すると、5つのファイルのうち最新のファイルのみがscpされ、出力は次のようになります。
iosTestOutput_20180831-175508-PDT.tgz 100% 199KB 21.7MB/s 00:00
cp: iosTestOutput_20180831-155546-PDT.tgz: No such file or directory
cp: iosTestOutput_20180831-142509-PDT.tgz: No such file or directory
cp: iosTestOutput_20180831-124259-PDT.tgz: No such file or directory
cp: iosTestOutput_20180831-115001-PDT.tgz: No such file or directory
しかし、実際にターゲットディレクトリにsshをリンクし、これらのファイルが存在することを観察したので、私が間違っているかどうかはわかりません。
ベストアンサー1
最初のファイルにのみ scp に必要な絶対パスがあります。
${server}:${server_dir}/$(ssh ${server} "ls -t ${server_dir} | head -5")
と評価される
${server}:${server_dir}/iosTestOutput_20180831-175508-PDT.tgz
iosTestOutput_20180831-155546-PDT.tgz
iosTestOutput_20180831-142509-PDT.tgz
...
明確にするために、スペースの代わりに改行文字を使用しました。
デフォルトでは、5つのファイル出力のそれぞれへのフルパスの内容を使用して生成されたリストを繰り返す必要があります。https://unix.stackexchange.com/a/240424/162359良いスタートになるかもしれません。
(テストされていない、おおよそのスケッチ)次のようになります。
for bkp in $(ssh ${server} "find ${absolute_path_remote_dir} -type f -exec stat -c '%X %n' {} \; | sort -nr | awk 'NR==1,NR==5 {print $2}'")
do
scp -r ${bkp} logs/ios
done
rsyncには、必要なものをよりエレガントに達成するのに役立つオプションがあります。