Linuxサーバー上でなんやかんや変更する前など、ディレクトリをコピーしてバックアップを取ったりする。
自動化しろよというのは置いといて、 cp
コマンドのオプションやディレクトリの有無による挙動の違いを、ちょくちょく忘れるのでメモ。
環境
cp (GNU coreutils) 8.30 および 8.31 で確認。
要約
こんな階層として、コピー先のディレクトリが存在しない前提。
. `-- src_dir |-- (いくつかのサブディレクトリ) `-- sub_dir `-- src.txt
ディレクトリまるごとコピーする場合
cp -aiv src_dir/ dest_dir/
特定のサブディレクトリをコピーする場合
mkdir dest_dir/ && cp -aiv src_dir/sub_dir/ dest_dir/.
オプションの概要
- a: archive, サブディレクトリやファイルの属性などを保持してコピー
- i: interactive, 上書き時に確認する、コピー先ディレクトリを間違えた時など、念のため
- v: verbose, 惰性で付けてる
コピー先ディレクトリの有無による挙動の変化
前述の要約では、単純化のためコピー先のディレクトリが存在しないものとしたが、 cp
はコピー先ディレクトリの有無で挙動が変わる。
以下に詳しい。