scpが隠しファイルをコピーする方法は?


63

私は頻繁にSCPを使用して、特にWeb関連のファイルをコピーします。問題は、これを行うたびに、隠しファイル(.htaccessなど)をコピーするコマンドを取得できないことです。

私は通常これを呼び出します:

scp -rp src/ user@server:dest/

これは隠しファイルをコピーしません。これを再度呼び出す必要はありません(次のようなことを行うことでscp -rp src/.* ...- とにかく奇妙...意味があります)。

scp「隠しファイルを含める」についてのマニュアルページには何も表示されませんでした。

どうすればこれを達成できますか?


src/.*コピーsrc/..(親ディレクトリ)も想定していますよね?
ケンシャープ

回答:


67

これは隠しファイルと完全に一致するはずです。ソースの末尾の/は、「このディレクトリの下のすべてのファイル」と表示されます。それにもかかわらず、テストと研究はあなたを立証します。これは愚かな振る舞いです。

答え」は、ソースの最後にドットを追加することです。

scp -rp src/. user@server:dest/

本当の答えは、rsyncのを使用することです。


ナイストリック、私はまだこれを実現していません。
cstamas 09年

21
rsync -avz -e ssh --progress src / user @ server:dest /
MikeyB 2009年

2
その動作を再現できません。 scp -r source/ host:source2ドットファイルをコピーします。2007
Mikel

3
.セキュリティの問題のため、最後にaを追加しても機能しなくなります(2019)。これは、ここで説明されています superuser.com/questions/1403473/scp-error-unexpected-filename
ステファン・

25

rsyncを試すことができます。この仕事により適しています:

rsync -av src / user @ server:dest /

(そしてそのマニュアルページは読む価値があります。)


2
私は常に rsyncに--progressオプションを使用します。それなしでは生きられません= D
Hofa

1
@Hofa私は通常-Pを使用します。これは短く、すでに--progressが含まれており、進行状況に既に興味がある場合に意味のある--partialも含まれています;
cstamas

9

ソースディレクトリの後にスラッシュを入れないでください。コードは次のようになります。

scp -rp src user@server:dest/

これにより、リモートマシンの「dest」の下にディレクトリ「src」が作成され、すべての隠しファイルが含まれます。おそらくあなたが望むものではありませんが、srcの隠しファイルをコピーします。


3

以下は問題を解決します。これは当社の継続的統合環境で完全にテストされています

scp -rp src/. user@server:dest/
example scp -rp /usr/src/code/. content001@172.11.11.11:/usr/dest/code/

それが役に立てば幸い


scpを最近更新した後、これはになりましたscp: error: unexpected filename: . 。それがあなたのディストリビューションで動作するかどうかをテストしてください、仲間のGoogler :)
Moritz Friedrich

1

隠しファイルのみをコピーするには、このコマンドを使用します

scp -rp /path_to_copy_hidden/.[!.]* user@host:/path_to_paste/

実際のゲームは、(非表示)で/.[!.]*始まるファイルを参照しているタグです.


0

上記のscpソリューションはどれもうまくいきませんでした。ただし、cygwinで次のように機能することがわかりました。scp -r directory / * host:directory '*'はすべての可視ファイルに一致し、不可視をスキップしました。


0

リモートマシンでパスワードログインが無効になっており、ログインする唯一の方法が公開鍵を介している場合、これを使用できます:

$ rsync -av -s 'ssh -i /path/to/your/private/SSH/key' --progress user1@remote.host:/remote/source/directory/ /local/destination/directory/

隠しファイルもコピーします。

また、「user1」にはこれらのファイルを読み取る権限が必要であることに注意してください。たとえば、この方法では他のユーザーのsshフォルダーをコピーできません。


0

scp正規表現をサポートしているので、これはうまくやってくれます:

scp -rp src/(*|.*) user@server:dest/


0

分散リビジョン管理は隠しファイルを処理します

CVE-2018-20685の脆弱性のため、この/.トリックはで使用できなくなりましたscp。ただし、gitHg Mecurial などの分散リビジョン管理は、他のファイルと同様に隠しファイルを処理します。お気に入りのHg Mercurialのコマンドは次のとおりです。

server:$ sudo apt install mercurial
client:$ sudo apt install mercurial
client:$ hg init src
client:$ cd src/
client:$ hg addr
client:$ hg com -m "first commit"
client:$ cd
client:$ hg clone src ssh://user@server/dest/

後続の変更を再度コミットclient:$ hg com -m "commit message"し、client:$ hg pushコマンドを使用してプッシュする必要があります。この水銀Mercurialチートシートから変更をプッシュする方法の詳細をご覧ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.