選擇性地從遠端目錄集合複製

選擇性地從遠端目錄集合複製

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

dir1 dir2 dir3 ... dir40

每個檔案都包含幾個編號的檔案:

file1 file2 file3 ... file2530

我只想複製每個目錄中選定範圍的檔案。由於每個目錄中的檔案名稱都相同,因此我想在本機上重新建立目錄層次結構。但既然我不想每一個文件,我不能只用來scp -r複製目錄中的每個文件。

我無法在遠端電腦上使用 ssh 密鑰建立自動連接,因此我更喜歡一種不涉及重複調用遠端複製命令的方法。這些文件也很大,所以我不想只是複製整個文件並刪除我不想要的文件rm並進行大括號擴展。

如何從遠端電腦複製一組檔案以及這些檔案的父目錄,同時保留目錄結構,而不複製這些目錄中的每個檔案?

答案1

您可以使用rsync,它只會對遠端執行一次 ssh,並為其提供完整的檔案清單或要複製或不複製的檔案的 glob 模式清單。例如,

rsync -navR --exclude='*-[4-9]?.out' --exclude='*-3[3-9].out' --exclude='*-???*.out' myremote:'dir*' mylocaldir

這將排除諸如file-40.out40 到 99、39file-33.out以及更大的 2 個字元的檔案名稱file-100.out。使用所示選項運行命令-n以收集將傳輸的名稱列表,如果可以,請刪除該選項以實際執行複製。

請注意,其全域模式rsync不支援大括號。{}指定要複製的文件的其他方法取決於排除模式的奇特程度,但萬無一失的方法是使用-n不排除模式來獲取完整的名稱列表,然後編輯此列表並將其作為--files-from文件列表提供。您還需要dir*從遠端目標中刪除:

rsync -av --files-from=list  myremote: mylocaldir

相關內容