通常、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つだけです。間違っている場合は訂正してください。
関連記事:
- ファイルまたはディレクトリをコピーするときに所有権とファイルのアクセス許可をそのまま維持する方法