Rsync

從遠端目錄的集合中選擇性地複制

  • June 1, 2017

我有一台帶有大量編號目錄的遠端電腦,如下所示:

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

引用自:https://unix.stackexchange.com/questions/368409