最新の5つのファイルをローカルディレクトリに安全にコピーする方法

最新の5つのファイルをローカルディレクトリに安全にコピーする方法

このコード行があります

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には、必要なものをよりエレガントに達成するのに役立つオプションがあります。

おすすめ記事