scp複製文件時排除指定文件

2019-11-23     Linux學習教程

請關注本頭條號,每天堅持更新原創乾貨技術文章。

如需學習視頻,請在微信搜索公眾號「智傳網優」直接開始自助視頻學習

1. 前言

本文主要講解如何在scp複製文件時排除指定文件。
舉例:
我需要將所有*.c文件從名為hostA的電腦複製到hostB,包括所有目錄。我使用以下scp命令,但不知道如何排除特定的文件(如*.out):

scp -r ~/projects/ user@hostB:/home/123/

如何告訴scp命令在Linux/Unix複製文件時排除指定的文件或目錄呢?

可以使用scp命令在網絡上的主機之間安全地複製文件。它使用ssh進行數據傳輸和身份驗證。典型的scp命令語法如下:

scp file1 user@host:/path/to/test/
scp -r /path/to/source/ user@host:/path/to/test/
scp [options] /dir/to/source/ user@host:/dir/to/test/

2. scp複製文件時排除指定文件

scp複製文件時排除指定文件


我不認為您可以在使用scp命令複製文件時可以過濾或排除文件。但是,有一個很好的解決方案可以排除文件並使用ssh安全地複製它。本教程解釋如何在使用scp遞歸複製目錄時過濾或排除指定文件。

如何使用rsync命令排除文件
它的語法是:

rsync -av -e ssh --exclude='*.out' /path/to/source/ user@hostB:/path/to/test/

解釋一下上面的命令:

-a : 遞歸到目錄,即複製所有文件和子目錄。此外,打開存檔模式和所有其他選項 (-rlptgoD)
-v : 詳細輸出
-e ssh : 使用ssh作為遠程shell,以便對所有內容進行加密
--exclude='.out' : 排除匹配模式的文件,例如。out或*.c等等.

rsync命令的例子
在本例中,從~/virt/目錄遞歸複製所有文件,但排除所有*.新文件:

rsync -av -e ssh --exclude='*.new' ~/virt/ root@centos7:/tmp

從~/virt/目錄遞歸複製所有文件,但排除指定文件

如果在遠程伺服器上沒有找到Rsync,則Rsync命令將失敗。在這種情況下,嘗試下面的scp命令,它在當前目錄中使用bash shell模式匹配(它不會與-r選項一起工作):

ls

輸出結果:
access.log-20190218 access.log-20190727 logip.new

複製當前目錄中除.new文件外的所有內容:

shopt -s extglob
scp !(*.new) root@centos7:/tmp/

輸出結果:
access.log-20190218 100% 4262 1.3MB/s 00:00
access.log-20190727 100% 836MB 32.7MB/s 00:25

3. 理解extglob shell選項來排除使用scp和rsync的文件

如果使用shopt命令(build tin)啟用extglob bash shell選項,Linux系統可以識別幾個擴展的模式匹配操作符,如下所示:

OperatorsDescription?(pattern-list)匹配給定模式的零次或一次出現*(pattern-list)匹配給定模式的零次或多次出現+(pattern-list)匹配給定模式的一個或多個匹配項@(pattern-list)匹配給定的模式之一!(pattern-list)匹配除給定模式之一之外的任何內容

使用scp命令複製文件時怎麼才能排除指定文件?

4. 總結

本教程向您展示了如何在Linux或類unix作業系統下的網絡上的主機之間使用scp或者rsync命令複製文件時排除指定的文件。有關更多信息,請參閱以下手冊頁:

man 1 rsync
man bash
man 1 scp

本文已同步至博客站,尊重原創,轉載時請在正文中附帶以下連結:
https://www.linuxrumen.com/rmxx/1336.html

點擊了解更多,快速查看更多的技術文章列表。

文章來源: https://twgreatdaily.com/zh-mo/mvPql24BMH2_cNUgIay-.html