[英]Pulling a lot of files from a remote host using ssh, find, and rsync
我正在嘗試集成以下命令以從遠程主機中提取大量文件,而不發送重復文件
for FILE in $(ssh $FTP_USER@$FTP_HOST find $REMOTE_DIR -maxdepth 1 -name "*$FILEGROUP*.dat.gz" -mmin -30);
do
echo "[`date '+%Y-%m-%d %H:%M:%S'`] + Transferring (ignore-existing): $FILE"
rsync -a --ignore-existing $FTP_USER@$FTP_HOST:$FILE $LOCAL_DIR
done
但是,它似乎在 FOR LOOP 的每次迭代都連接到 FTP_HOST。 有沒有辦法連接一次,將 FIND 命令的所有結果拉到一個數組中,然后在該數組中循環 rsync?
這是我執行此操作的復雜命令:
ssh "$FTP_USER@$FTP_HOST" \
$(printf '%q ' \
find "$REMOTE_DIR" -maxdepth 1 -type f -name "*$FILEGROUP*.dat.gz" -mmin -30 -printf '%P\0' \
) |
rsync -avh0 --files-from=- "$FTP_USER@$FTP_HOST":"$REMOTE_DIR" "$LOCAL_DIR"
說明:我們希望在遠程端運行以下命令,以生成我們要復制的所有文件的相對路徑的空分隔列表:
find "$REMOTE_DIR" -maxdepth 1 -type f -name "*$FILEGROUP*.dat.gz" -mmin -30 -printf '%P\0'
為了遠程運行它,我們使用以下技巧:
ssh "$FTP_USER@$FTP_HOST" $(printf '%q ' ......)
確保所有參數都正確轉義,以便 ssh 將調用的遠程 shell 不會解釋它們。
最后,我們將文件名列表通過管道傳輸到rsync
。 我們使用-0 --files-from=-
告訴rsync
從其標准輸入讀取文件列表,並將其視為空分隔列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.