ターミナルでのファイルコピー
あるディレクトリの内容を別のディレクトリにコピーするのは非常に簡単な作業です。ただし、それを行うにはたくさんのオプションがあります。 Linuxは、さまざまなアクションを通じてファイルやディレクトリを操作するための多数のツールに恵まれています。
すべての手順はUbuntu18.04.1で示されています。最初に、操作するダミーファイルをいくつか作成しましょう。
$mkdir -vdir_A
それでは、タッチを使用してダミーファイルを作成しましょう。
$接するダミー{{1..10}
いくつかのダミーファイルを使用して、dir_A内に別のフォルダーを作成しましょう。
$mkdir -vdir_B
$接するダミー{{1..10}
これで、ディレクトリdir_Aの全体的な構造は次のようになります。
$木dir_A
Cpコマンド
NS cp コマンドは、ファイルをコピーするための最も一般的なツールです。これは、すべてのLinuxシステムにデフォルトで付属しているツールです。ファイルとディレクトリのコピーはcpの唯一の目的です。幅広い機能をサポートします。
これがの基本構造です cp 指図。
$cp <オプション>> <ソース>> <行き先>>たとえば、のコピーを作成しましょう ダミー1 名前のファイル dumpy1_copy 。
$cpダミー1dummy1_copy
それでは、一度に複数のファイルをコピーしてみましょう。このような操作の場合、cpでは宛先がディレクトリである必要があります。ここでは、ワイルドカード式を使用してすべての ダミー ファイルとそれらをに入れます 〜/ダウンロード ディレクトリ。
$cpダミー*〜/ダウンロード
ディレクトリをコピーするのはどうですか?
$cp -vrdir_A dir_A_copy
ここでは、2つの異なるフラグを使用しました。それらの簡単な内訳を見てみましょう。
- -r:の略 再帰的 コピー(隠しファイルを含む)。コピーにディレクトリ全体またはそれ以上が含まれる場合は、必須のフラグ。
- -v:の略 詳細 。 cpツールは、実行しているすべてのアクションを出力します。
シンボリックリンクをたどりたいですか? -Lフラグを追加します。
$cp -Lvr <ソース>> <行き先>>宛先ディレクトリに同じ名前のファイルがすでにあるとします。上書きを避けたい場合は、-nフラグを使用してください。競合が発生した場合に、cpがファイルを上書きしないようにします。
$cp -nv <ソース>> <行き先>>機密性の高いコピー/貼り付けアクションを実行している場合は、何が起こるかを細かく制御することをお勧めします。このような場合は、-iフラグを使用してください。これは、競合が発生するたびにcpが確認を求めるインタラクティブモードを表します。
$cp -私 <ソース>> <行き先>>
もっと興味があるなら、manページは常に最高のドキュメントの1つです。 cpの詳細をご覧ください。
$男 cp
mvコマンド
mvツールはcpツールに似ています。ただし、mvはコピーする代わりに、ファイルとディレクトリを移動します。 cpと比較して、それはより単純なものです。
mvのコマンド構造はcpに似ています。
$mv <オプション>> <ソース>> <行き先>>の内容を移動するには dir_A に dir_A_copy 、次のコマンドを実行します。
$mv -vdir_A/dir_A_copy
ここで、-vフラグは 詳細 モード。 dir_Aの内容だけを移動したい場合は、代わりに次のものを使用してください。この場合、ターゲットディレクトリは事前に存在している必要があります。
$mv -vdir_A/ *dir_A_copy
mvツールを操作する必要はあまりありません。使用可能なすべてのオプションについては、manページを確認してください。
$男 mv
Rsyncコマンド
これは、ファイルコピー用の最も一般的で強力なツールの1つであり、主にバックアップに使用されます。リモート接続を介してファイルをコピーする機能を保持します。 cpやmvとは異なり、動作を最大限にカスタマイズできる高度なファイルコピーオプションも多数付属しています。
Rsyncは、交換する必要のあるデータの量を劇的に削減するデルタ転送アルゴリズムで最も有名です。リモート同期の場合、これにより多くの帯域幅が節約されます。
Rsyncは通常、Linuxディストリビューションにプリインストールされていません。ただし、人気があるため、現在ではすべての主要なLinuxディストリビューションで利用できます。使用する Pkgs.org ディストリビューションのrsyncパッケージを見つけるため。 rsyncがインストールされていると仮定して、始めましょう。
まず、rsyncの基本的なコマンド構造。 cpと非常によく似ています。
$rsync<オプション>> <ソース>> <行き先>>始める前に、ここにいくつかの人気のあるrsync引数があります。
- -v :詳細モード。コンソール画面で実行されているアクションを出力します。
- -vv :詳細を含む詳細モード
- -NS :再帰モード。ディレクトリをコピーする場合は存在する必要があります
- -と :データを圧縮する
- -に :アーカイブデータ
- -NS :ドライラン。詳細モードと組み合わせて実行する必要があります。コマンドを実際に実行する場合は、アクションを出力するだけです。
- -消去 :ソースディレクトリにファイルとディレクトリが含まれなくなった場合は、宛先ディレクトリのファイルとディレクトリを削除します
- -ファイル全体なし :何があっても、rsyncにデルタ送信アルゴリズムの使用を強制します。最小限のデータ書き込みを確保する必要があるシナリオで役立ちます。
- –remove-source-file :コピー後にソースファイルを削除してください。
実際にそれらをチェックしてみましょう。まず、ディレクトリのコピー。次のコマンドを実行します。
$rsync-vrdir_A/dir_A_copy
さらに詳細な出力については、-vvフラグを使用してみましょう。
$rsync-vv -NSdir_A/dir_A_copy
それでは、rsyncのクールな部分をチェックしてみましょう。 rsyncが変更されたファイルのみをインテリジェントにコピーし、帯域幅とディスク書き込みを節約する方法について説明しました。実際にそれをチェックする時が来ました。この例では、アクションは dir_A ディレクトリ。
$rsync-vv --no-whole-fileダミー*dir_B/
デルタ送信が有効になっているにもかかわらず、ローカルデータ転送を実行しているときにrsyncがそれを適用しない場合があります。
それでは、ドライラン機能を確認してみましょう。 rsyncコマンドを実際に実行する前に、事前にテストすることが常に重要です。これがドライランの出番です。Rsyncは、コマンドが実際に実行された場合に何が起こるかを出力します。
$rsync-anvrdir_A/dir_A_copy
Rsyncはリモートディレクトリでも機能します。問題ありません。必要なのは、SSHキーが構成された適切なSSH接続だけです。
$ rsync<オプション>> <local_dir>><ユーザー名> @<リモートホスト>>:<destination_dir>>
移動操作を実行したいですか?これをrsyncの観点から見ると、rsyncはソースディレクトリのコンテンツをコピーしてから、ソースコンテンツを削除します。
$rsync-v --remove-source-files <ソース>> <行き先>>
操作の結果を確認してください。
$木dir_A$木dir_A_copy
最終的な考え
cpとrsyncは、Linuxターミナルのフォルダー内のファイルをコピーするために使用できる最も一般的なツールです。どちらもスクリプト作成に非常に適しています。実装する前に、必ず関数をテストしてください。
楽しみ!