Scp

scp拷貝方向:什麼是源,什麼是目標?

  • February 11, 2019

scp 的簡介是:

scp

$$ -1246BCpqrv $$ $$ -c cipher $$ $$ -F ssh_config $$ $$ -i identity_file $$ $$ -l limit $$ $$ -o ssh_option $$ $$ -P port $$ $$ -S program $$ $$ [user@ $$主機1:]文件1 …$$ [user@ $$主機2:]文件2

什麼是源,什麼是目標?我總是想知道複製發生在哪個方向。它是如何定義的?

Unix 命令幾乎總是(很少有例外)在目標之前有源。如果有意義的話,大多數都允許在最終目標之前使用多個來源。

這包括scp.

cp某些命令(如and的 GNU 版本mv)有一個選項(例如-tor --target-directory=DIRECTORY),允許您將目標放在首位 -但預設設置是標準的“目標之前的源”。這非常有用,因此您可以在使用類似的東西時將目標放在源之前find ... -exec cp -t target/ {} +,或者您可以避免使用-I {}with xargs(這要慢得多,它會導致xargs每個 arg 派生一個命令,而不是盡可能多地適合每個命令行),例如,... | xargs -0r mv -t target/而不是... | xargs -0r -I {} mv {} target/

如果沒有上面提到的顯式覆蓋選項,“目標之前的源”幾乎是聞所未聞的 - 如此罕見以至於您完全有權認為“嗯?WTF?” 如果你遇到它。


如果您需要scp一次將多個文件發送到多台機器,請在 for 循環中執行,如下所示:

for h in host1 host2 host3... ; do
 scp file1 file2 file3... "user@$h:/path/"
done

pdcp 從 Parallel Distributed Shell使用。 pdsh為大多數 linux 發行版打包。

例如

pdcp -w host1,host2,host3 file1 file2 file3 /path/to/target/

這是一個非常簡單的範例,pdsh有一個配置文件,您可以使用該配置文件來定義主機和具有任意組名的主機組(例如allwebserversdbserversgpunodes或其他名稱)。然後您可以在pdshorpdcp命令中使用它們:

pdsh -g all 'uname -a ; uptime'
pdcp -g webservers index.html /var/www/

for上面的循環不同,它不按順序執行命令或複製文件,一次一台主機。它並行執行多個命令,並根據您機器的 CPU 核心數量進行合理限制。

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