ウェブサイト検索

Linuxでファイルのコピーとターゲットディレクトリの作成を同時に行う


通常、ファイルをある場所から別の既存の場所にコピーするには、cprsyncscp などのコマンドを使用します。存在する場合は、まずそれを作成し、次にその新しく作成された場所にファイルをコピーします。これまで、私は通常、コマンドラインからファイルをある場所から別の場所にコピーする方法をとっていました。ファイルをコピーし、コピー先のディレクトリが存在しない場合は自動的に作成できることをご存知ですか?いいえ?問題ない!このガイドでは、Linux で 1 つのコマンドでファイルのコピーとターゲット ディレクトリの作成を同時に行う方法を説明します。

2 つのコマンドの組み合わせについて話しているわけではないことに注意してください。たとえば、以下のように 2 つのコマンドを組み合わせることで、誰でもこれを行うことができます。

mkdir -p destination && cp source_file destination

ただし、これは単一のコマンドではありません。ここでは、mkdircp という 2 つのコマンドを使用しました。これは実際にはワンライナーコマンドです。次に、1 つのコマンドだけを使用して同じタスクを実行する方法を説明します。

Linux でファイルのコピーとターゲット ディレクトリの作成を同時に行う

これは 3 つの異なる方法を使用して実行できます。まず、install コマンドを使用してこれを行う方法を見てみましょう。

方法 1 - install コマンドを使用する

install コマンドは、Linux で選択した宛先にファイルをコピーします。これは、automake などのビルド システムによって、まさにこの目的のために特別に使用されます。これは GNU coreutils の一部であるため、インストールする必要はありません。

install コマンドを使用してファイルをコピーし、同時に宛先ディレクトリを作成するには、次のコマンドを実行します。

install -D source-file destination-directory

例:

次のコマンドは、sk.txt という名前のファイルを ostechnix という名前のターゲット ディレクトリにコピーします。対象のディレクトリが存在しないことに注意してください。以下のように install コマンドを使用して、ファイルをコピーし、同時に宛先ディレクトリを作成します。

install -D sk.txt ostechnix/sk.txt

ls コマンドを使用してファイルの内容を一覧表示し、ファイルが ostechnix ディレクトリにコピーされたかどうかを確認します。

ls ostechnix/
sk.txt

インストールコマンドを使用してファイルをコピーし、同時にターゲットディレクトリを作成します

見る?以前にターゲット ディレクトリを作成していませんでした。インストール コマンドによってディレクトリが自動的に作成され、そこにファイルが保存されました。

便利ですよね?確かに!これは、install コマンドの便利な機能の 1 つです。これをシェルスクリプトで使用できます。

この方法にはいくつかの制限があります。宛先の場所の最後にソース ファイル名を指定する必要があります。ファイル名を指定しない場合、install コマンドはファイルをコピーせず、次のエラーを表示します。

install -D sk.txt ostechnix/
install: target 'ostechnix/' is not a directory: No such file or directory

一度に 1 つのファイルをコピーできます。 install コマンドを使用して複数のファイルを複数の宛先にコピーする方法はありません。

次のガイドで説明するように、install コマンドを使用して、ファイルをコピーし、同時に所有権と権限を変更することもできます。

  • ファイルをコピーし、同時に所有権とアクセス許可を変更する方法

installコマンドの詳細については、そのマニュアルページを参照してください。

man install

方法 2 - cp コマンドを使用する

通常、ファイルをある場所から別の場所にコピーするには、cp コマンドを使用します。 cp コマンドには、--parents という名前のオプションがあり、ソース ファイルのディレクトリ構造全体をコピーして、コピー先に保存できます。

たとえば、sk.txt ファイルが ~/Downloads ディレクトリに保存されており、それを ~/Documents にコピーしたいとします。ディレクトリ。 cp コマンドを使用してファイルを ~/Downloads から ~/Documents にコピーすると、ファイルは次のようなディレクトリ構造で保存されます -> ~/Documents/Downloads/sk.txt

リアルタイムで実行して、何が起こるか見てみましょう。

cp --parents Downloads/sk.txt ~/Documents/

次に、tree コマンドを実行して、~/Documents ディレクトリの内容を確認します。

tree Documents/
Documents/
└── Downloads
    └── sk.txt

1 directory, 1 file

cpコマンドを使用してファイルをコピーし、同時にターゲットディレクトリを作成します

~/Documents の場所内にディレクトリを作成していないことに注意してください。 cp コマンドの --parents オプションは、ソース ファイルのディレクトリ構造を保持しました。

install コマンドとは異なり、宛先ディレクトリの末尾にファイル名を指定する必要はありません。

これは私たちのトピックとは直接関係ありません。ただし、cp コマンドはターゲット ディレクトリを自動的に作成します。つまり、ソース ファイルのディレクトリ構造は保存されます。

方法 3 - rsync コマンドを使用する

Rsync は、ローカル ディレクトリとリモート ディレクトリの間でデータをコピーおよびバックアップするための理想的なソリューションです。 rsync コマンドを使用してファイルをコピーし、同時にターゲット ディレクトリを作成するには、次のコマンドを実行します。

rsync sk.txt ostechnix/

ostechnix というディレクトリが存在する必要はありません。 Rsync はこれを自動的に作成し、その中にソース ファイルを保存します。

rsyncコマンドを使用してファイルをコピーし、同時にターゲットディレクトリを作成します

これら 3 つのコマンドの中で、私は install コマンドを好みます。なぜなら、install コマンドを使用して、ネストされたディレクトリ (別のディレクトリ内のディレクトリ) を作成できるからです。私の知る限り、cp および rsync コマンドは 1 つのディレクトリしか作成できません。間違っていたら訂正してください。

関連記事:

  • ファイルまたはディレクトリをコピーするときに所有権とファイル権限をそのまま維持する方法

関連記事