Linuxでファイルのコピーとターゲットディレクトリの作成を同時に行う
通常、ファイルをある場所から別の既存の場所にコピーするには、cp
、rsync
、scp
などのコマンドを使用します。存在する場合は、まずそれを作成し、次にその新しく作成された場所にファイルをコピーします。これまで、私は通常、コマンドラインからファイルをある場所から別の場所にコピーする方法をとっていました。ファイルをコピーし、コピー先のディレクトリが存在しない場合は自動的に作成できることをご存知ですか?いいえ?問題ない!このガイドでは、Linux で 1 つのコマンドでファイルのコピーとターゲット ディレクトリの作成を同時に行う方法を説明します。
2 つのコマンドの組み合わせについて話しているわけではないことに注意してください。たとえば、以下のように 2 つのコマンドを組み合わせることで、誰でもこれを行うことができます。
mkdir -p destination && cp source_file destination
ただし、これは単一のコマンドではありません。ここでは、mkdir
と cp
という 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 instal
l
方法 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 つのディレクトリしか作成できません。間違っていたら訂正してください。
関連記事:
- ファイルまたはディレクトリをコピーするときに所有権とファイル権限をそのまま維持する方法