Rsync
從遠端目錄的集合中選擇性地複制
我有一台帶有大量編號目錄的遠端電腦,如下所示:
dir1 dir2 dir3 ... dir40
每個都包含幾個編號的文件:
file1 file2 file3 ... file2530
我只想複製每個目錄中選定的文件範圍。由於每個目錄中的文件名相同,因此我想在本地電腦上重新創建目錄層次結構。但由於我不想要每個文件,我不能只使用
scp -r
複制目錄中的每個文件。我無法在遠端機器上使用 ssh 密鑰建立自動連接,因此我更喜歡一種不涉及重複呼叫遠端複製命令的方法。這些文件也很大,所以我不想只是複制整個內容並刪除我不想要的文件
rm
並使用大括號擴展。如何從遠端電腦複製一組文件以及這些文件的父目錄,同時保留目錄結構而不複製這些目錄中的每個文件?
您可以使用
rsync
,它只會對遠端執行一個 ssh,並為其提供完整的文件列表或要復製或不複製的文件的 glob 模式列表。例如,rsync -navR --exclude='*-[4-9]?.out' --exclude='*-3[3-9].out' --exclude='*-???*.out' myremote:'dir*' mylocaldir
這將排除文件名,例如
file-40.out
從 40 到 99、file-33.out
到 39file-100.out
甚至更大的 2 個字元。使用顯示的選項執行命令-n
以收集將被傳輸的名稱列表,如果可以,請刪除實際執行複制的選項。注意,它的 glob 模式
rsync
不支持大括號{}
。指定要複製的文件的替代方法取決於您的排除模式有多奇特,但一種萬無一失的方法是使用-n
不排除模式來獲取完整的名稱列表,然後編輯此列表並將其作為--files-from
文件列表提供。您還需要dir*
從遠端目標中刪除:rsync -av --files-from=list myremote: mylocaldir