web-dev-qa-db-ja.com

ssh経由で特定のものを除いて、すべてのファイルとディレクトリをどのようにコピーしますか?

Linuxコマンドラインを使用して、scpコマンドを使用し、特定のディレクトリからすべてのファイルとフォルダーをコピーします。ただし、tiny_mceフォルダーのようにほとんど変更しないものをコピーするため、帯域幅を消費したくありません。すべてをコピーするコツは何ですか、フォルダの短いリストをスキップしますか?

23
Mike McKee

rsyncは正常に動作し、ほとんどの場合、トランスポートプロトコルとしてSSHを自動的に使用します。ファイルを比較して、変更されたファイルのみをアップロードします。ただし、 除外リスト を使用して、rsyncを行わないファイルをツリー内で指定することもできます。

19
Rizwan Kassim

あなたは試すことができます rsync これは変更されたファイルのみをコピーし、sshでも動作します。

12
Stuart Grimshaw

ここではrsync --excludeを使用するのがより明白な選択ですが、本当にいくつかのファイルまたはフォルダーを送信し、特定のものを除外したい場合は、scpでシェルグロビングを使用できます。まず、シェルに適切なグロビングオプションが設定されていることを確認します。 bashの場合はshopt -s extglobを実行し、zshの場合はsetopt ksh_globを使用します。次に、このようなもの:

scp /path/to/folder/!(tiny_mce|other_folder|*.bak) user@Host:target_path

...指定されたパターンに一致するものを除いて、ソースフォルダ内のすべてをコピーします。もちろん、その部分で創造的になることができます。

9
Caleb

rsyncは良い解決策ですが、別の方法を探している場合:

たとえば、「foo」、「bar、baz」というディレクトリを含む「test」というディレクトリがあるとします。これらのディレクトリには、さまざまなファイルタイプがたくさんあります。

test
|____bar
| |____1.jpg
| |____1.png
| |____1.txt
| |____2.jpg
| |____2.png
| |____2.txt
|____baz
| |____1.avi
| |____2.avi
| |____3.png
|____foo
| |____test.blah
|____test.txt

PNG以外のすべてをコピーしたい

scp $(find /location/of/test -type f ! -name "*.png") # -> Note the logical NOT!!

この例では、コマンドはすべてのファイルを同じ宛先ディレクトリに配置します-これはあなたが望む動作ではないかもしれません。

7
simonm

試してみるのに最適なツールは「lftp」です。

lftp sftp://etc.etc/ 
lftp> ls 
    --- remote listing ---
lftp> mirror -R -n local/ remote/

Ssh経由でRSyncを使用することもできます

rsync -avzp -e ssh /this/dir/  remoteuser@remotehost:/remote/dir/

うまくいくはずです。

3
Kent Fredric

セキュアコピーの使用-scp

_scp -r file user@Host:_

多くのファイルをコピーするには

_scp /directory/* user@Host:destinationPath_

一部のファイルをコピーするには

scp /directory/!(*.doc) user@Host:destinationPath

。docファイル以外のディレクトリの内容をコピーします

0
Yogeesh H T

私は確かにrsyncをお勧めします。

rsync -vra --exclude = "除外するもの" -e sshフォルダーuser @ remotehost:/ folder

0
amit singh

tiny_mceディレクトリを無視するには、2つのステップでそれを行うことができます。すべてのディレクトリが小文字で始まると仮定します。

scp -r USER@HOSTNAME:~/FOLDER/[a-s]* .
scp -r USER@HOSTNAME:~/FOLDER/[u-z]* .

また、USER、HOSTNAME、およびFOLDERを実際の値に変更します。

0
Fady Ibrahim

これは、移行先サーバーから実行したときにうまくいきました。

rsync -av --progress user@servername:/sourcefolder /destinationfolder --exclude thefoldertoexclude
0
user2373210

私はちょうど終わりました rsyncよりもunisonを好む方法を書く それ以来、

  • トランスポートにssh以外のデーモンは必要ありません
  • いつでもどちらの側でもファイルを変更できます-複数のマスターを簡単に片側から同期リクエストをプッシュするだけで済みます
  • Modtime、属性/権限、ソフトリンクなどに関しては私は執事です。問題はありません。 1つのプロジェクトでは、4つのミラーを使用し、1つはcygwin Hostです。私の例のcrontab設定を参照してください。
  • *.bakなどの除外をサポートしています。私の設定ファイルのサンプル
0
Marcos