通常、cp
などのコマンドを使用して、ある場所から別の既存の場所にファイルをコピーします。 、rsync
、およびscp
など。ターゲットの場所が存在しない場合は、最初にターゲットの場所を作成し、次にファイルをその新しく作成された場所にコピーします。これまで、これは私が通常、コマンドラインからある場所から別の場所にファイルをコピーする方法です。ファイルが存在しない場合は、ファイルをコピーして宛先ディレクトリを自動的に作成できることをご存知ですか?いいえ?問題ない!このガイドでは、Linuxで1つのコマンドを使用して、ファイルのコピーとターゲットディレクトリの作成を同時に行う方法について説明します。
2つのコマンドの組み合わせについて話しているのではないことに注意してください。たとえば、次のような2つのコマンドを組み合わせることで、誰でもこれを行うことができます。
$ mkdir -p destination && cp source_file destination
ただし、これは単一のコマンドではありません。ここでは、2つのコマンド、つまりmkdir
を使用しました。 およびcp
。これは実際にはワンライナーコマンドです。次に、1つのコマンドだけを使用して同じタスクを実行する方法を示します。
Linuxでファイルのコピーとターゲットディレクトリの作成を同時に行う
これは、3つの異なる方法で実行できます。まず、install
を使用してそれを行う方法を確認します コマンド。
方法1-install
を使用 コマンド
install
コマンドは、Linuxで選択した任意の宛先にファイルをコピーします。これは、automake
などのビルドシステムによってこの目的のために特別に使用されます。 。これはGNUcoreutilsの一部であるため、インストールする必要はありません。
install
を使用して、ファイルをコピーし、同時に宛先ディレクトリを作成するには コマンド、実行するだけです:
$ install -D source-file destination-directory
例:
次のコマンドは、sk.txt
という名前のファイルをコピーします ostechnix
という名前のターゲットディレクトリへ 。ターゲットディレクトリが存在しないことに注意してください。 install
を使用して、ファイルのコピーと宛先ディレクトリの作成を同時に行います。 以下のようなコマンド:
$ install -D sk.txt ostechnix/sk.txt
ファイルがostechnix
にコピーされているかどうかを確認します ls
を使用してディレクトリの内容を一覧表示します コマンド:
$ ls ostechnix/
sk.txt

見る?以前はターゲットディレクトリを作成していませんでした。 installコマンドはディレクトリを自動的に作成し、ファイルをその中に保存しました。
便利ですよね?それはそう!これは、install
の便利な機能の1つです。 指図。これはシェルスクリプトで使用できます。
この方法にはいくつかの制限があります。宛先の場所の最後にソースファイル名を記載する必要があります。ファイル名を指定しない場合は、install
コマンドはそれをコピーせず、次のエラーを表示します:
$ install -D sk.txt ostechnix/
install: target 'ostechnix/' is not a directory: No such file or directory
一度に1つのファイルをコピーできます。 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

~/Documents
内にディレクトリを作成しなかったことを思い出してください 位置。 --parents
cp
のオプション コマンドは、ソースファイルのディレクトリ構造を保持しました。
install
とは異なり コマンドの場合、宛先ディレクトリの最後にファイル名を指定する必要はありません。
これは私たちのトピックに直接関係していません。ただし、cp
コマンドはターゲットディレクトリを自動的に作成しました。つまり、ソースファイルのディレクトリ構造を保持しました。
方法3-rsync
を使用する コマンド
Rsync
ローカルディレクトリとリモートディレクトリ間でデータをコピーおよびバックアップするための理想的なソリューションです。 rsyncコマンドを使用してファイルをコピーし、その時点でターゲットディレクトリを作成するには、次のコマンドを実行します。
$ rsync sk.txt ostechnix/
ostechnix
というディレクトリ 存在する必要はありません。 Rsyncはそれを自動的に作成し、その中にソースファイルを保存します。

これらの3つのコマンドの中で、私はinstall
を好みます 指図。なぜなら、install
を使用してネストされたディレクトリ(別のディレクトリ内のディレクトリ)を作成できるからです。 指図。 cp
およびrsync
私の知る限り、コマンドで作成できるディレクトリは1つだけです。間違っている場合は訂正してください。
関連記事:
- ファイルまたはディレクトリをコピーするときに所有権とファイルのアクセス許可をそのまま維持する方法