Linux のコマンドラインでファイルを複数のディレクトリにコピーする
この簡単なガイドでは、find
、cp
、echo
、 を使用してコマンド ラインから複数のディレクトリにファイルをコピーする方法について説明します。 Linux 上の xargs
および tee
コマンド。
先日、いくつかのビデオを Arch Linux デスクトップの別のフォルダーにコピーしたいと思いました。すでにご存知のとおり、ファイルを右クリックし、コンテキスト メニューから Copy
オプションを選択して、コピー先のディレクトリ/フォルダーに貼り付けることで簡単に実行できます。
ただし、 ファイルを一度に複数のディレクトリにコピーする他の方法があるかどうか知りたいです。単一のファイルを複数の異なるディレクトリに一度にコピーしたいときに役立つと思いました。いくつかのWeb検索を行ったところ、次の解決策が見つかりました。
重要な警告:
次のコマンドでは確認が求められないことに注意してください。対象ディレクトリに同名のファイルが存在する場合は、自動的に置き換えられます。
Linux を初めて使用する場合は、運用環境でコマンドを使用し始める前に、テスト マシンでコマンドをテストすることをお勧めします。こうすることで、データの不必要な損失を防ぐことができます。
Linux のコマンドラインから複数のディレクトリにファイルをコピーする
ホーム ディレクトリに ostechnix.txt
というテキスト ファイルがあり、それを Downloads
< という 2 つの異なるディレクトリにコピーしたいと考えています。 と ドキュメント
を一度に実行できます。
まず、find
および cp
コマンドを使用して、ファイルを複数の異なるディレクトリにコピーする方法を見てみましょう。
方法 1: find および cp コマンドを使用する
find
および cp
コマンドを使用して、単一のファイルを複数のディレクトリに一度にコピーできます。
find
は、ディレクトリ階層内のファイルを検索する Unix および Linux コマンドで、cp コマンドはファイルとディレクトリをコピーするために使用されます。
find
と を使用して、
コマンドで、次を実行します。ostechnix.txt
という名前のファイルを ~/Downloads
ディレクトリと ~/Documents
ディレクトリにコピーするには>cp
find ~/Downloads/ ~/Documents/ -maxdepth 0 -type d -exec cp ostechnix.txt {} \;
Linux で find および cp コマンドを使用してファイルを複数の異なるディレクトリにコピーする
上記のコマンドは、現在のディレクトリにある ostechnix.txt ファイルを ~/Downloads
ディレクトリと ~/Documents
ディレクトリにコピーします。
'-max Depth 0'
オプションを指定しない場合、ostechnix.txt
ファイルは ~/Downloads
にコピーされます。 、~/Documents
ディレクトリ、およびそのサブディレクトリにも移動します。したがって、忘れずに指定してください。
前に警告したように、宛先ディレクトリのいずれかに同じ名前のファイル (つまり、ostechnix.txt
) がすでに存在する場合、上記のコマンドは確認を行わずに既存のファイルを単純に上書きします。
既存のファイルを上書きしたくない場合は、以下のように cp
コマンドで -n
フラグを使用できます。
find ~/Downloads/ ~/Documents/ -maxdepth 0 -type d -exec cp -n ostechnix.txt {} \;
今後は、ターゲット ファイルが宛先の場所にすでに存在する場合、ターゲット ファイルは置き換えられません。
方法 2: echo、xargs、および cp コマンドを使用する
ファイルを複数の場所にコピーするもう 1 つの方法は、echo
、xargs
、および cp
コマンドを使用することです。
すでにご存知のとおり、cp
コマンドはファイルとディレクトリのコピーに使用され、xargs
コマンドは標準入力からのコマンド ラインの構築と実行に使用されます。
echo
、xargs
、および cp
コマンドを使用してファイルを複数のディレクトリにコピーするには、次のコマンドを実行します。
echo ~/Downloads ~/Documents | xargs -n 1 cp ostechnix.txt
Linux で cp、echo、xargs コマンドを使用してファイルを複数のディレクトリにコピーする
上記のコマンドを分解して、どのように機能するかを見てみましょう。
通常、echo
コマンドは、指定された文字列またはテキストを標準出力に出力します。ただし、この場合は、echo
コマンドの出力を xargs
にパイプします。ここで、echo
コマンドは、入力としてディレクトリ パスを xargs
に送信します。
xargs
コマンドは、cp
コマンドを 2 回実行し、各ディレクトリのパスを cp
コマンドの末尾に追加します。
xargs
コマンドは、echo
コマンドから 2 つの引数 (つまり、ディレクトリ パス) を受け取ります。 xargs
コマンドの -n 1
オプションは、xargs
にこれらの引数のうちの 1 つだけを一度に追加するように指示します。
繰り返しますが、上記のコマンドは、ターゲット ファイルが既に存在する場合はそれを置き換えます。ターゲット ファイルを置き換えたくない場合は、コマンドに -n
フラグを追加します。
echo ~/Downloads ~/Documents | xargs -n 1 cp -n ostechnix.txt
方法 3 - tee コマンドを使用する
Tee
は、標準入力からの読み取り、標準出力とファイルへの書き込みに使用される Unix および Linux ユーティリティです。
次に、ostechnix.txt ファイルを /home/sk/Downloads
と / という 2 つの異なるディレクトリにコピーします。ホーム/sk/ ドキュメント
。
これを行うには、ターミナルから次のコマンドを実行するだけです。
tee /home/sk/Downloads/ostechnix.txt /home/sk/Documents/ostechnix.txt < /home/sk/ostechnix.txt
上記のコマンドは、ostechnix.txt
ファイルをホーム ディレクトリから ~/Downloads
および ~/Documents
ディレクトリにコピーします。
tee
コマンドは入力を標準出力にも書き込むことに注意してください。 tee
コマンドでこれを実行したくない場合は、以下に示すように標準出力を /dev/null
にリダイレクトします。
tee /home/sk/Downloads/ostechnix.txt /home/sk/Documents/ostechnix.txt < /home/sk/ostechnix.txt >/dev/null
Linux で tee コマンドを使用してファイルを複数の異なるディレクトリにコピーする
もう一度警告します。宛先に同じ名前のファイル (つまり、ostechnix.txt
) がすでに存在する場合、上記のコマンドは既存のファイルを上書きします。
詳細については、上記のコマンドのマニュアル ページを確認してください。
man cp
man find
man xargs
man echo
man tee
結論
これは、Linux のコマンド ラインから一度に複数のディレクトリにファイルをコピーする方法です。他の方法もあるかもしれませんが、これらのコマンドは非常にシンプルで使いやすいと思います。
もう一度、宛先パスが正しいことを確認し、最も重要なこととして、宛先の場所に同じ名前のファイルが存在しないことを確認してください。
関連記事:
- Linux で特定の種類のファイルを検索して、あるディレクトリから別のディレクトリにコピーする方法
- Linux でディレクトリ構造を維持しながら特定のファイル タイプをコピーする
- ファイルのコピーとターゲット ディレクトリの作成を同時に行う
- ファイルをコピーし、同時に所有権とアクセス許可を変更する方法
- ファイルまたはディレクトリをコピーするときに所有権とファイル権限をそのまま維持する方法
- Rsync を使用して SSH 経由で部分的に転送されたファイルを再開する
- Linux および Unix で大きなファイルをネットワーク経由で迅速に転送する方法
- アドバンスト コピー – Linux の cp および mv コマンドに進行状況バーを追加
- ファイルの内容を表示せずにクリップボードにコピーする