Linux ファイルコピー

LinuxBeginner
オンラインで実践に進む

はじめに

Linux ファイルシステムは、ファイルやディレクトリを管理するための強力なツールを提供します。定期的に使用する最も重要なコマンドの 1 つは cp コマンドで、ファイルやディレクトリをある場所から別の場所にコピーできます。

この実験(Lab)では、cp コマンドを使用して、個々のファイルや複数のファイルを一度にコピーする方法を学びます。この基本的なスキルは、データのバックアップ、ファイルシステムの整理、Linux 環境の効果的な管理に不可欠です。

この実験(Lab)を終える頃には、さまざまなオプションを指定して cp コマンドを自信を持って使用し、ファイルのコピーニーズを満たすことができるようになります。

ディレクトリとファイルの作成

ファイルのコピーを練習する前に、操作するディレクトリとファイルを作成する必要があります。このステップでは、ディレクトリ構造といくつかのサンプルファイルを作成します。

まず、作業するプロジェクトディレクトリに移動します。

cd ~/project

次に、サンプルファイルを含む data-files というディレクトリを作成しましょう。

mkdir data-files

このコマンドを実行しても何も出力されないはずです。これは、多くの Linux コマンドが正常に実行された場合の通常の動作です。

次に、この新しいディレクトリに移動しましょう。

cd data-files

次に、コピーの練習に使用する 3 つの空のテキストファイルを作成しましょう。

touch apple.txt orange.txt grape.txt

touch コマンドは、ファイルが存在しない場合は空のファイルを作成し、既に存在する場合は更新日時を更新します。

現在のディレクトリの内容を一覧表示して、ファイルが正しく作成されたことを確認しましょう。

ls -l

次のような出力が表示されるはずです。

total 0
-rw-r--r-- 1 labex labex 0 [date] apple.txt
-rw-r--r-- 1 labex labex 0 [date] grape.txt
-rw-r--r-- 1 labex labex 0 [date] orange.txt

この出力は、3 つの空のファイルが正常に作成されたことを示しています(ファイルサイズは 0 バイト)。

この時点で、ディレクトリ構造は次のようになります。

~/project/
└── data-files/
    ├── apple.txt
    ├── orange.txt
    └── grape.txt

次のステップでは、これらのファイルを操作し、さまざまな場所にコピーする方法を学びます。

単一ファイルのコピー

このステップでは、cp コマンドを使用して、単一のファイルをある場所から別の場所にコピーする方法を学びます。

cp コマンドの基本的な構文は次のとおりです。

cp [options] source_file destination

ここで:

  • source_file はコピーするファイルです
  • destination はファイルのコピー先です(ディレクトリまたは新しいファイル名を指定できます)

現在、data-files ディレクトリにいます。 apple.txt ファイルにコンテンツを追加して、コンテンツが正しくコピーされることを確認しましょう。

echo "This is sample content for the apple file." > apple.txt

> 記号は、echo コマンドの出力をファイルにリダイレクトし、既存のコンテンツを上書きします。

次に、apple.txt ファイルを親ディレクトリ(~/project)に新しい名前でコピーしましょう。

cp apple.txt ../apple_copy.txt

このコマンドを分解すると:

  • cp はコピーコマンドです
  • apple.txt はコピーするソースファイルです
  • ../apple_copy.txt は、親ディレクトリ(..)に新しいファイル名 apple_copy.txt でコピーすることを指定します

ファイルが正しくコピーされたことを、その内容を確認して検証しましょう。

cat ../apple_copy.txt

次の出力が表示されるはずです。

This is sample content for the apple file.

これは、ファイルがコンテンツをそのまま正常にコピーされたことを確認します。

この操作後、ディレクトリ構造は次のようになります。

~/project/
├── data-files/
│   ├── apple.txt
│   ├── orange.txt
│   └── grape.txt
└── apple_copy.txt

複数のファイルを一度にコピー

このステップでは、複数のファイルを一度に新しいディレクトリにコピーする方法を学びます。これは、複数のファイルを同時にバックアップまたは整理する必要がある場合に特に役立ちます。

まず、プロジェクトディレクトリに戻りましょう(現在は data-files ディレクトリにいます)。

cd ~/project

次に、ファイルをコピーする新しいディレクトリ backup を作成しましょう。

mkdir backup

ファイルをコピーする前に、残りのテキストファイルにコンテンツを追加して、コピープロセスをより適切に検証できるようにしましょう。

echo "This is sample content for the orange file." > data-files/orange.txt
echo "This is sample content for the grape file." > data-files/grape.txt

次に、ワイルドカードパターンを使用して、data-files ディレクトリから backup ディレクトリにすべてのテキストファイルをコピーしましょう。

cp data-files/*.txt backup/

このコマンドでは:

  • cp はコピーコマンドです
  • data-files/*.txt は、ワイルドカード * を使用して、data-files ディレクトリ内の拡張子が .txt のすべてのファイルに一致させます
  • backup/ は、ファイルをコピーする宛先ディレクトリです

すべてのファイルが正しくコピーされたことを、backup ディレクトリの内容を一覧表示して検証しましょう。

ls -l backup/

次のような出力が表示されるはずです。

total 12
-rw-r--r-- 1 labex labex 41 [date] apple.txt
-rw-r--r-- 1 labex labex 41 [date] grape.txt
-rw-r--r-- 1 labex labex 42 [date] orange.txt

また、コピーされたファイルの 1 つの内容をチェックして、データが正しくコピーされたことを確認しましょう。

cat backup/orange.txt

次のように表示されるはずです。

This is sample content for the orange file.

これにより、すべてのファイルがコンテンツをそのままバックアップディレクトリに正常にコピーされたことが確認されます。

この操作後、ディレクトリ構造は次のようになります。

~/project/
├── data-files/
│   ├── apple.txt
│   ├── orange.txt
│   └── grape.txt
├── backup/
│   ├── apple.txt
│   ├── orange.txt
│   └── grape.txt
└── apple_copy.txt

高度なファイルコピーオプション

このステップでは、ファイルコピーのタスクをより効率的にする cp コマンドの便利なオプションについて学びます。

まず、プロジェクトディレクトリに戻りましょう。

cd ~/project

-p によるファイル属性の保持

ファイルをコピーするときに、タイムスタンプ、所有権、権限など、元のファイルの属性を保持したい場合があります。 -p オプションを使用すると、これを行うことができます。

cp -p data-files/apple.txt backup/apple_preserved.txt

元のファイルと保持されたコピーを比較してみましょう。

ls -l data-files/apple.txt backup/apple.txt backup/apple_preserved.txt

backup/apple_preserved.txt は元のファイルと同じタイムスタンプを持っているのに対し、-p オプションなしで以前にコピーした backup/apple.txt は新しいタイムスタンプを持っていることに気付くでしょう。

-r による再帰的なコピーの作成

ディレクトリをその内容とともにコピーするには、-r(再帰的)オプションを使用する必要があります。これを実証するために、ネストされたディレクトリ構造を作成しましょう。

mkdir -p data-files/nested/deep
echo "This is a nested file." > data-files/nested/nested_file.txt
echo "This is a deep nested file." > data-files/nested/deep/deep_file.txt

次に、data-files ディレクトリ全体とその内容を新しい場所にコピーしましょう。

cp -r data-files data-files-backup

ディレクトリ構造とファイルが正しくコピーされたことを確認しましょう。

find data-files-backup -type f | sort

コピーされたディレクトリ構造内のすべてのファイルが一覧表示された出力が表示されるはずです。

data-files-backup/apple.txt
data-files-backup/grape.txt
data-files-backup/nested/deep/deep_file.txt
data-files-backup/nested/nested_file.txt
data-files-backup/orange.txt

-i によるインタラクティブモード

ファイルをコピーするときに、既存のファイルを誤って上書きしてしまう可能性があります。 -i(インタラクティブ)オプションは、ファイルを上書きする前にプロンプトを表示します。

cp -i data-files/apple.txt backup/apple.txt

backup/apple.txt は既に存在するため、上書きするかどうかを確認するプロンプトが表示されます。

cp: overwrite 'backup/apple.txt'?

y で上書きするか、n でキャンセルすることができます。

これらの高度なオプションにより、cp コマンドはファイル管理のニーズに対してさらに強力で柔軟になります。

まとめ

この実験(Lab)では、Linux の cp コマンドを使用して、ファイルとディレクトリを効率的にコピーする方法を学びました。ディレクトリとファイルを作成する基本から始め、個々のファイルや複数のファイルを一度にコピーする方法に進みました。

取り上げた主な概念:

  1. 基本的なファイルコピー: cp コマンドを使用して、単一のファイルをある場所から別の場所にコピーします。

    cp source_file destination
    
  2. 複数のファイルのコピー: ワイルドカードを使用して、複数のファイルを 1 つのコマンドでコピーします。

    cp source_directory/*.txt destination_directory/
    
  3. 高度なオプション:

    • -p: ファイル属性(タイムスタンプ、権限など)の保持
    • -r: ディレクトリとその内容を再帰的にコピー
    • -i: 誤った上書きを防ぐためのインタラクティブモード

これらのファイルコピーのスキルは、Linux での効果的なファイル管理の基本です。重要なファイルのバックアップ、ディレクトリの整理、アプリケーションのデプロイなど、cp コマンドは Linux ツールキットに不可欠なツールになります。

Linux コマンドラインは、ファイル操作のための多くの強力なツールを提供しており、cp コマンドはそのうちの 1 つにすぎないことを忘れないでください。Linux の学習を続けるにつれて、これらのツールを組み合わせて複雑なファイル操作を効率的に実行する方法を発見するでしょう。