ちょっと面白いです。LinuxのコマンドラインツールがWindowsのツールよりもはるかに優れている点はたくさんありますが、同等のものを見つけられなかったのは robocopy です。 Robocopyはcp
よりもはるかに用途が広く、Linuxツールを使って自分のやりたいことをどのように行うかわかりません。
特定のユースケースでは、ほとんど同じようなファイルを含む2つのディレクトリがありますが、1つには新しいソースファイルがあり、もう1つには他のディレクトリにはないコンテンツファイルがあり、おそらく新しいソースファイル(ウェブサイト用)があります。後者のディレクトリから前者にファイルをコピーし、新しいコンテンツファイルなどを追加しますが、宛先ディレクトリの新しいファイルは上書きしません。
私はLinuxでこれを30分程度行う方法を理解しようとしましたが、おそらくbashスクリプトなど、自分がやりたいことを行うには何かを学ばなければならないと決めたので、robocopyだけを使用できることに気付きました。他にもいくつか要件がありました。私は基本的にPython(Django)WebサイトをSVNリポジトリからGitリポジトリに変換していて、SVNでコミットされていない変更がないことを確認したかったのですが、条件付きで.svn
ディレクトリと.pyc
コンパイル済みPythonファイルを除外します。次のrobocopyコマンドは、まさに私が望むものを実行します:
robocopy source destination /XO /E /XD .svn /XF *.pyc
LinuxのRobocopyに相当するものはありますか? rsync
を少し調べましたが、フォルダを同期する前にrsyncサーバーを設定する必要があるようです。
Rsyncは間違いなくあなたが求めているもののようです。あるマシンから別のマシンにファイルをコピーするために「rsyncサーバー」をセットアップする必要はありません。 Rsyncは、ほとんどのLinuxボックスですでに有効になっている(手動で無効にしていない場合)、SFTP(SSHファイル転送)を介したファイルのコピーをサポートしています。
詳細については、Lifehackerの rsyncを使用してシステム間でファイルをミラーリングする を参照してください。
データをバックアップしたり、ファイルを安全に配布したり、インターネット経由でオフィスから自宅、ローカルネットワーク上のコンピューター間、またはコンピューターからWebサーバーに作業用ドキュメントをミラーリングしたりする場合でも、rsyncで作業を完了できます。今日は、rsyncを使用して、コマンドラインで安全な接続を介してMacとPCの間でフォルダーをミラーリングします。
Rsyncは無料で(スピーチのように)、クロスプラットフォームです。つまり、オペレーティングシステム(Windows/Cygwin、Mac OS、Linux)間でファイルを同期します。 sshを介して機能するため、暗号化され、安全です。 FTPとは異なり、インクリメンタルなので、partsofchangedファイルが転送され、ファイル全体ではありません。これにより、Speedy Gonzalezのようになります。そして、それがコマンドラインであるという事実は、それをスクリプト化可能にし、簡単に自動化します。
rsyncは、robocopyのように、同じマシン上のあるディレクトリから別のディレクトリにファイルをコピーします。 robocopyコマンドと同等のrsyncコマンドを次に示します。
rsync -auv --exclude '.svn' --exclude '*.pyc' source destination
これにより、ソースが宛先に再帰的にコピーされ、古いファイルと「.svn」および「* .pyc」ディレクトリ/ファイルが除外されます。
.svn
ディレクトリと.pyc
ファイルを除外せずに生活できる場合、ファイル名とディレクトリ名にスペースが含まれていない場合は、GNU/Linuxコマンドプロンプトでcp
を使用できます。
cp -uaT source destination
ここで、source
およびdestination
はディレクトリです。
-u
オプションは、source
の新しいバージョンのみがdestination
の既存のファイルを置き換えることを保証します。 https://superuser.com/a/341296 を参照してください。-a
オプション、別名「アーカイブ」は、タイムスタンプや権限などを保持しながら、source
内のディレクトリを再帰的にコピーします。-T
オプションは、source
のcontentsをディレクトリdirectory
自体ではなくsource
に確実にコピーします。GNU cp
のバージョンを使用することが重要です。これらのオプションの一部は、macOSなどの他のUNIXバージョンでは異なるか、使用できない場合があるためです。
ファイル名またはディレクトリ名にスペースがある場合は、他の人が述べたようにrsync
を使用するか、-print0
でfind
を-0
でxargs
にパイプすることができます。この答えの。これらの可能性はどちらも除外を許可します。