GNU/Linux >> Linux の 問題 >  >> Linux

Linux および Unix でファイルをコピーする方法10 cp コマンドの例

cp は Unix の基本的なコマンドの 1 つです。ソースから宛先に 1 つ以上のファイルまたはディレクトリをコピーするために使用されることは既にご存じでしょう。

このチュートリアルは初心者向けですが、実用的な例を使用してさまざまな cp コマンド オプションをすばやく確認することは、誰にとっても役に立ちます。

常に cp コマンドを使用している場合でも、以下で説明する 1 つまたは複数の例は初めてかもしれません。

コピー コマンドの一般的な形式:

cp [option] source destination

1.ソースから宛先にファイルまたはディレクトリをコピーします

ファイルをコピーするには、コピー元とコピー先をコピー コマンドに渡す必要があります。次の例では、ファイルを project/readme.txt から projectbackup/readme-new.txt にコピーします

$ cp project/readme.txt projectbackup/readme-new.txt

$ cd projectbackup/

$ ls
readme-new.txt

あるフォルダから同じ名前の別のフォルダにファイルをコピーする場合は、以下に示すようにコピー先のディレクトリ名だけで十分です。

$ cp project/readme.txt projectbackup/

$ cd projectbackup/

$ ls
readme.txt

以下に示すように、再帰オプション -r を使用して、ディレクトリ (およびそのすべてのコンテンツ) をコピー元からコピー先にコピーできます。

$ ls project
src/  bin/  doc/  lib/  test/  readme.txt  LICENSE

$ cp -r project/ backup/

$ ls backup
src/  bin/  doc/  lib/  test/  readme.txt  LICENSE

2.複数のファイルまたはディレクトリをコピー

以下に示すように、ソースから宛先に複数のファイルをコピーできます:

$ cd src/
$ cp global.c main.c parse.c /home/thegeekstuff/projectbackup/src/

ソース ファイルに共通のパターンがある場合は、次に示すようにワイルドカードを使用します。この例では、すべての c 拡張ファイルが /home/thegeekstuff/projectbackup/src/ ディレクトリにコピーされます。

$ cp *.c /home/thegeekstuff/projectbackup/src/

以下に示すように、複数のディレクトリをコピーします。

$ cd project/

$ cp -r src/ bin/ /home/thegeekstuff/projectbackup/

3.宛先にコピーする前にバックアップ

宛先ファイルが同じ名前で既に存在する場合、cp を使用すると、宛先ファイルを上書きする前にバックアップできます。

この例では、readme.txt が project/ と projectbackup/ ディレクトリの両方に存在し、project/ から projectbackup/ にコピーするときに、次のように既存の readme.txt がバックアップされます。

$ cd projectbackup

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1038 Jan  8 13:15 readme.txt

$ cd ../project 

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1020 Jan  8 12:25 readme.txt

$ cp --backup readme.txt  /home/thegeekstuff/projectbackup/

以下に示すように、既存のファイルは readme.txt~ に移動され、新しいファイルは readme.txt としてコピーされます。

$ cd /home/thegeekstuff/projectbackup/
$ ls -l
-rw-r--r-- 1 bala geek 1020 Jan  8 13:36 readme.txt
-rw-r--r-- 1 bala geek 1038 Jan  8 13:15 readme.txt~

バックアップについて言えば、ファイルを効果的にバックアップするために rsync コマンドがどのように機能するかを理解することが重要です。

4.コピー中にリンクを保持

cp コマンドを実行すると、ソースがリンク ファイルの場合、リンク ファイルではなく実際のファイルがコピーされます。リンクをそのままコピーしたい場合は、以下のようにオプション -d を指定してください:

以下は、オプション -d を指定しないと、(リンクではなく) ファイルをコピーすることを示しています:

$ cd project/bin

$ ls -l startup.sh
lrwxrwxrwx 1 root root 18 Jan  8 13:59 startup.sh -> ../test/startup.sh

$ cp startup.sh /home/thegeekstuff/projectbackup/bin/

$ cd /home/thegeekstuff/projectbackup/bin/

$ ls -l
-rw-r--r--  1 root root       102 Jan  8 14:02 startup.sh

コピー中にリンクを保持するには、次の手順を実行します:

$ cd project/bin

$ cp -d startup.sh /home/thegeekstuff/projectbackup/bin/

$ ls -l startup.sh
lrwxrwxrwx 1 root root 18 Jan  8 14:10 startup.sh -> ../test/startup.sh

5.既存のファイルを上書きしない

コピー先ファイルが存在しない場合にのみコピーしたい場合は、以下のようにオプション -n を使用します。これは既存のファイルを上書きせず、cp コマンドは以下に示す成功終了コードを返します:

$ cd projectbackup

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1038 Jan  8 13:15 readme.txt

$ cd ../project 

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1020 Jan  8 12:25 readme.txt

$ cp -n readme.txt /home/thegeekstuff/projectbackup/bin/

$ echo $?
0

以下に示すように、宛先ファイルは上書きされませんでした。

$ cd projectbackup

$ ls -l readme.txt
-rw-r--r-- 1 bala geek 1038 Jan  8 13:15 readme.txt

6.上書き前に確認(インタラクティブモード)

-i オプションを使用すると、以下に示すように、ファイルを上書きする前に確認を求められます。

$ cp -i readme.txt /home/thegeekstuff/projectbackup/
cp: overwrite `/home/thegeekstuff/projectbackup/readme.txt'? y

7.ファイルへのハード リンクを作成する (コピーする代わりに)

cp コマンドを実行すると、(ファイルをコピーする代わりに) ファイルのハード リンクを作成することができます。次の例では、sample.txt ファイルのハード リンクをディレクトリ test/ に作成します。

$ ls -li sample.txt
10883362 -rw-r--r-- 2 bala geek   1038 Jan  9 18:40 sample.txt

$ cp -l sample.txt test/ 

$ ls -li test/sample.txt
10883362 -rw-r--r-- 2 bala geek   1038 Jan  9 18:40 test/sample.txt

上記のように、test/sample.txt は sample.txt ファイルにハード リンクされたファイルであり、両方のファイルの inode は同じです。

8.ファイルまたはディレクトリへのソフト リンクを作成する (コピーする代わりに)

cp コマンドを実行すると、ファイルまたはディレクトリへのソフトリンクを作成できます。次の例では、libFS.so.6.0.0 のシンボリック リンクが libFS.so として作成されます。

# cd /usr/lib/

# ls -l libFS.so.6.0.0
-rw-r--r-- 1 root root 42808 Nov 19  2010 libFS.so.6.0.0

# cp -s libFS.so.6.0.0 libFS.so

# ls -l libFS.so
lrwxrwxrwx 1 root root 14 Jan  9 20:18 libFS.so -> libFS.so.6.0.0

9.コピー中にファイルまたはディレクトリの属性を保持

-p オプションを使用すると、以下に示すように、ファイルまたはディレクトリのプロパティを保持できます:

$ ls -l sample.txt
-rw-r--r-- 2 bala geek   1038 Jan  9 18:40 sample.txt

$ cp -p sample.txt test/ 

$ ls -l test/sample.txt
-rw-r--r-- 2 bala geek   1038 Jan  9 18:40 test/sample.txt

モード、所有権、タイムスタンプなどの必要なプロパティのみを保持することもできます。

次の例では、コピー中にファイルのモードを保持します:

$ cp --preserve=mode sample.txt test/

10.ソース ファイルが宛先よりも新しいか見つからない場合にのみコピー

小さいファイルはコピーにそれほど時間はかかりませんが、巨大なファイルをコピーするとかなりの時間がかかる場合があります。そのため、大きなファイルをコピーするときは、ソース ファイルが宛先ファイルよりも新しい場合、または以下に示すように -u オプションを使用して宛先ファイルが見つからない場合にのみ行うようにしてください。

この例では、2 つのファイル LICENSE と readme.txt が project/ から projectbackup/ にコピーされます。ただし、LICENSE ファイルは projectbackup/ ディレクトリに既に存在し、project/ ディレクトリ内のファイルよりも新しいものです。

$ cd project/

$ ls -l LICENSE readme.txt 
-rw-r--r-- 1 bala geek 108 Jan  8 13:14 LICENSE
-rw-r--r-- 1 bala geek 32 Jan  8 13:16 readme.txt

$ cd /home/thegeekstuff/projectbackup/

$ ls -l LICENSE readme.txt 
ls: cannot access readme.txt: No such file or directory
-rw-r--r-- 1 root root 112 Jan  9 20:31 LICENSE

したがって、この例では、LICENSE ファイルを projectbackup/ ディレクトリに再度コピーする必要はありません。以下に示すように -u オプションを使用すると、これは cp コマンドによって自動的に処理されます。以下の例では、ファイルのタイムスタンプで示されているように、readme.txt ファイルのみがコピーされました。

$ cp -u -v LICENSE readme.txt  /home/thegeekstuff/projectbackup/
`readme.txt' -> `/home/thegeekstuff/projectbackup/readme.txt'

$ cd /home/thegeekstuff/projectbackup/

$ ls -l LICENSE readme.txt 
-rw-r--r-- 1 bala geek  112 Jan  9 20:31 LICENSE
-rw-r--r-- 1 bala geek   32 Jan  9 22:17 readme.txt

Linux
  1. Linuxでfdコマンドを使用してファイルを検索する方法

  2. オブジェクト ファイルをコピーおよび変換するための Linux Objcopy コマンドの例

  3. Linux / UNIX でファイルを管理する 10 の Cat コマンドの例

  1. Linuxでファイルとディレクトリを圧縮する方法(例付き)

  2. Linuxでファイルを圧縮および解凍する方法

  3. Linux での dd コマンドの例

  1. Linuxでファイルとディレクトリをコピーする方法

  2. Linux Catコマンドの使用方法(例付き)

  3. LinuxでRsyncコマンドを使用するにはどうすればよいですか?