- ベストアンサー
Linux初心者のためのcpコマンドの使い方
- Linux初心者のためのcpコマンドの使い方について解説します。
- ディレクトリやファイルのコピーが簡単に行えるcpコマンドの使い方について説明します。
- 隠しファイルを含めてディレクトリのコピーを行う方法について解説します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
cp dirA/{.*,*} dirB マニュアルを読めば、cpには 複数ファイルを指定してディレクトリへコピーする、という書式があることがわかります。 それに従えば (1) cp dirA/.なんたら1 dirA/.なんたら2 ... dirA/かんたら1 dirA/かんたら2 ... dirB とコピーしたいファイルを列挙して、最後にコピー先のディレクトリを指定、となります。 これは、ファイルが増えると面倒です。 そこで、シェルには、特殊な記法を使ったときに、それに合致するファイル名一覧に変換する機能があります。 その一つが 任意の文字列に一致する * です。 この置換はコマンドに渡す前に行われます。cpは、 *が使われたかどうか等は知りませんし知る必要もありません。 そこで、(1)を変形させていくのですが、御存じの通り、 .で始まるファイルは * にマッチしません。そこで、 .で始まるファイルとそうでないものとに分けた結果が1行目です。{}はカンマで区切ったいずれかにマッチします。 *.{h,cpp} として、C++のソースが対象、といった使い方をします。 シェルや設定によっては、*が.で始まるファイルにマッチしたり、より高度なパターンがあったりしますが、比較的一般に使えるやりかたを紹介いたしました。
その他の回答 (2)
> cp dirA/* dirB とすると、隠しファイルがコピーされず、 bashの組み込みコマンドshoptで設定しておけば「*」の指定で隠しファイル(ドットファイル)も対象になりますので、cpコマンド部分は一文で済ませることができます。 たとえば以下のように試してみてください。 # shopt -s dotglob <-- ドットファイルを含む指定を行なう(-s =set)。 # cp dirA/* dirB # shopt -u dotglob <-- ドットファイルを含む指定を解除する。(-u =unset)
お礼
素早いご返答ありがとうございました。 今回はshoptの設定はそのままに、ワイルドカードの組み合わせでなんとかすることにしましたが、 教えていただいた内容も大変勉強になりました。 初歩的な質問にも関わらずご丁寧にありがとうございました。
- localica
- ベストアンサー率52% (202/385)
「man cp」と打って下さい。 コマンドのオプションが表示されるので適切なオプションを選択してください。 初心者は「man コマンド」でコマンドの使用方法覚えることか始めるのが宜しいと思います。
お礼
素早いご返答ありがとうございました。
お礼
素早いご返答ありがとうございました。 ワイルドカードの使い方が勉強不足で 初歩的な質問になってしまいましたが、 詳しい説明ありがとうございました。