質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

4704閲覧

Linuxでのcpコマンドの -a オプションについて教えてください。

VqFeCFRUL0U7zc6

総合スコア5

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2020/08/17 12:29

ある本でファイルのバックアップを作成する際に、

cp -a hoge.txt{,.bak}

というコマンドが使われていたのですが、特にこの-aオプションについて解説されていませんでした。
ググっても「サブディレクトリや属性なども含め、可能な限り全てを保持しながらコピーする」という説明しかなく具体的な使用方法を検索できませんでした。
{}は何を意味するのですか?
また、「,」は何を意味するのですか?
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2020/08/17 12:48

>ある本で 出典を明示できないようでは困りもの。 その本以外をググっては? ヒントは append
guest

回答2

0

ベストアンサー

-aオプション

man cpを見ると、-aは、

-dR --preserve=all と同様

で、-dは、

--no-dereference --preserve=links と同様

で、--no-dereferenceは、

SOURCE にあるシンボリックリンクを決してたどらない

(シンボリックはシンボリックリンクとしてコピー)

-Rは、

再帰的にディレクトリをコピーする

(これは分かりますね?)

--preserve=allは、

指定した属性を保持する (デフォルト: mode, ownership, timestamps)。可能な場合に追加できる属性: context, links, xattr, all

(つまり、読み書き実行属性、所有者、タイムスタンプ、シンボリックリンクのリンク先、SELinuxの属性も可能な限りコピー)

ということです。

具体的な使用方法を検索できませんでした。

使用方法は指定するだけです。
「使用シーン」という意味なら、ディレクトリごと、できるだけそのままコピーしたい場合ですね。実行するユーザーの権限によってはコピーできない属性もありますが。

hoge.txt{,.bak}

シェルのコマンドラインで、aa{bb,cc,dd}と書くとaabb aacc aaddと書いたのと同じになります。
cp -a hoge.txt{,.bak}だと、cp -a hoge.txt hoge.txt.bak}です。

投稿2020/08/17 13:01

otn

総合スコア84790

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

VqFeCFRUL0U7zc6

2020/08/17 16:11

{}はcpコマンド特有のものではなかったんですね!ありがとうございます!
guest

0

cp の -a オプションは -RPpと同じ意味です(アーカイブモード:再帰的にコピーする・シンボリックリンクは追わない・(パーミッション a-time m-time 等を保持する)です。

{,.bak}はブレース展開で「,」は区切り文字でその前が空白だと直前の文字列を保持します。
カンマの後ろは直前のの文字列にその文字列を結合して展開します。

つまり
cp -a hoge.txt{,.bak}は

cp -RPp hoge.txt hoge.txtと
cp -RPp hoge.txt hoge.txt.bakに展開されます。

投稿2020/08/17 12:54

編集2020/08/17 13:05
hana_yama_san

総合スコア923

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

VqFeCFRUL0U7zc6

2020/08/17 16:13

なるほど!ブレース展開っていうんですね!便利な書き方ですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問