こんにちは、フルスタックエンジニアのryuです。
今回はLinuxのcpコマンドについて解説します。cpとはcopyのことで、ファイルやディレクトリをコピーするために使用します。cpコマンドを使ったことの無い方や、便利なオプションを知りたい方のために詳しく解説します。
目次
linux cpコマンド基本的な使い方
cpコマンドの使い方が分からない・・・
今回の記事では、“cp”コマンドの基本的な使い方を解説します。cpはcopyの略で、ファイルやディレクトリをコピーするコマンドです。
Linuxの中で基本的なコマンドなのでぜひ覚えておきましょう。今回の記事の内容は以下の通りです。
- cpコマンドでファイルをコピー
- cpコマンドでディレクトリにコピー
- cpコマンドのオプション
では、詳しく解説します!
cpコマンドのでファイルをコピー
では、早速cpコマンドを使ってみましょう。cpコマンドの基本構文は以下の通りです。
cp test1.txt test2.txt
cp [コピー元のファイル] [コピー先のファイル]
text1.txtというファイルをtest2.txtにコピーする動きになります。コピー先のファイルが無い場合はファイルが作成されます。
では、実際にLinuxで確認してみましょう。
ファイルを作成して、コピーしてからファイルの中身を確認します。
以下のようにコマンドを入力してみましょう。
echo "test" > test1.txt #test1.txtファイルを作成
cp test1.txt test2.txt #test1.txtをコピー
cat test2.txt #test2.txtの中身を表示
→test と表示
ちなみにファイルは相対パスで指定しております。絶対パスでも大丈夫です。相対パス、絶対パスが分からない方はこちらの記事を参考にしてください。
【ITパスポート講座⑪】絶対パスと相対パスとは?ファイルパスを理解する!
Linuxで動作させるとこのようになります。ファイルがコピーされていることが確認できます。
今回の内容はこちらの動画でも紹介しています。30秒くらいで見れます。
cpコマンドでファイルをディレクトリにコピー
次にファイルをディレクトリの中にコピーします。コマンドの文法は以下のようになります。
cp test1.txt testdir/
cp [コピー元のファイル] [コピー先のディレクトリ]
では、実際にLinuxで確認してみましょう。
ディレクトリを作成して、そこに先ほど作成したtest1.txtをコピーします。
コマンドは以下のように入力します。
mkdir testdir #testdirという名前のディレクトリを作成
cp test1.txt testdir #test1.txtをtestdirディレクトリにコピー
ls ./testdir #lsコマンドでtestdirの中身を確認
Linuxで入力するとこのような感じになります。
ディレクトリの中にファイルがコピーされていることが分かります。
このようにcpコマンドを使用すると、ファイルのコピーができます。さらに、コピーする場所も指定することができます。cpコマンドのオプションを使えば、さらに色々なことができるようになります。
linux cpコマンドで良く使うオプション
cpコマンドで良く使うオプションは以下の3つです。
- cp -r ディレクトリをコピーする
- cp -u 保存先のファイルが新しい場合コピーしない
- cp -v コピーの詳細を表示
では、一つずつ詳しく解説します。
cp -r ディレクトリをコピーする
まず、-rでディレクトリをコピーするオプションです。ディレクトリごとかディレクトリの中身をコピーするかは、コピー元の指定の仕方で変わります。
#ディレクトリごとコピー
cp -r testdir testdir2
cp -r [コピー元のディレクトリ] [コピー先のディレクトリ]
#ディレクトリの中身をコピー
cp -r testdir/* testdir2
cp -r [コピー元のディレクトリ]/* [コピー先のディレクトリ]
*”アスタリスク”はワイルドカードといって、全ての文字列という意味です。つまり、全てのファイル名が指定されます。
実際に試してみましょう。
まず、testdir2ディレクトリを作成して、先ほど作成したtestdirディレクトリをコピーします。ちなみに、testdirの中にはtest1.txtファイルが格納されています。
#ディレクトリごとコピーする
mkdir testdir2
cp -r testdir testdir2
ls ./testdir2
→testdir
#ファイルの中身だけコピーする
cp -r testdir/* testdir2
ls ./testdir2
→test.txt (testdir 先ほどコピーしたのも)
実際のLinuxではこのようになります。
ちなみに-rを付けないでディレクトリをコピーすると以下のようなエラーが表示されます。cpコマンドでディレクトリを指定する場合は必ず-rを付けましょう。
p: -r not specified; omitting directory ‘testdir’
→
p:-rは指定されていません。ディレクトリ「testdir」を省略
cp -u 保存先のファイルが新しい場合コピーしない
次に良く使うオプションは-uです。保存先のファイルが新しい場合はコピーしないようになります。
バックアップのスクリプトに使用することが多いです。
cp -u test1.txt test2.txt
cp -u [コピー元のディレクトリ] [コピー先のディレクトリ]
動作については、こちらの画像を見てください。
最初のcp -uでは、test2.txtの方が新しく編集されたためコピーされません。
その後、test1.txtを編集したため、test2.txtに中身がコピーされるようになりました。
バックアップをする際、古いファイルの内容を上書きしてしまうミスが無くなります。
cp -v コピーの詳細を表示
最後に紹介するのは-vです。-vはcp以外のコマンドでも詳細を表示するオプションになります。-vとはverboseの頭文字です。
こちらは、コマンド単体で使うというよりは、スクリプトを書く際に何をコピーしたか出力するために使用します。
では、使い方を説明します。
cp -v test1.txt test2.txt
cp -v [コピー元のファイル] [コピー先のファイル]
Linuxで動作させるとこのようになります。
‘test1.txt’ – > ‘test2.txt’のように何のファイルをコピーしたのか詳細を表示してくれます。
cpコマンドのオプション一覧
cpコマンドの主なオプションの一覧です。
-f | コピー先に同じ名前のファイルがあれば強制的に上書き |
-i | コピー先に同じ名前のファイルがある場合は確認する |
-p | コピー元の属性を保持したままコピー |
-r,-R | ディレクトリ内を再帰的にコピーする |
-d | シンボリックリンクもコピーする |
-a | 元のファイルの構成と属性をコピー先でも保持する |
linux cpコマンド使い方まとめ
ここまで、cpコマンドの使い方やオプションを紹介してきました。cpコマンドはファイルやディレクトリをコピーするだけのコマンドですが、良く使うコマンドの1つです。ぜひ使いこなせるようになります。