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

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

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

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

Q&A

解決済

1回答

1531閲覧

*がついているファイルと*がついていないファイルコピーの方法

beginner_Linux

総合スコア21

Linux

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

0グッド

0クリップ

投稿2017/06/22 16:12

###前提・実現したいこと
現在、外部ファイルを1行ずつ読み込んでファイルコピーを行っています。
その処理の中にsample.logと*.txtのファイルコピーを分けてでなら行うことができるのですが、同時に行うコードを組むことができません。

1の処理では*.txtのファイルコピーができなくて
2の処理だとsample.logのファイルコピーができません。
この2つのファイルが同時にコピーできる方法はないでしょうか?

A=sample/sample2/sample3
B=sample4/sample5/sample6
C=sample.log
D=*.txt

cp ${A}/${C} ${B}/${C} ・・・1
cp ${A}/${D} ${B}/ ・・・2

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

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

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

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

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

guest

回答1

0

ベストアンサー

ワイルドカードなどにより複数のファイルをパターンで指定するのはLinuxの機能ではなくシェルの機能です。よってどのようなパターンを使えるかはシェルのマニュアルを見るとよいと思います。

bashを例にとるとご質問のようなことはbrace expansionで可能です。

bash

1# manを調べて・・・ 2$ man bash 3... 4Brace Expansion 5 Brace expansion is a mechanism by which arbitrary strings may be gener‐ 6 ated. This mechanism is similar to pathname expansion, but the file‐ 7 names generated need not exist. Patterns to be brace expanded take the 8...長いので省略... 9# やってみる 10$ cp ${A}/{sample.log,*.txt} ${B}/.

ところでcpコマンドには
cp [OPTION]... [SOURCE]... [DIRECTORY]
という構文があります。ゆえに以下でもよいです。これならbrace expansionのような機能を持たないシェルであっても大丈夫ですね。これもcpのマニュアルに載っています。

cp ${A}/sample.log ${A}/*.txt ${B}/.

brace expansionのような機能は全てのシェルで必ず使えるわけではないと思います。一方上記のcpの構文はどのUnixのcpでも同じように動いてくれそうです。そういう意味では後者のやり方の方が望ましいといえる場合があるかも知れません。例えばインストールスクリプトのようなものは、あらゆる環境で動くことが保証できるような書き方の方が望まれると思います。

投稿2017/06/22 17:50

KSwordOfHaste

総合スコア18392

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

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

beginner_Linux

2017/06/22 20:35

回答ありがとうございます 上記のやり方はshでも正しく動作するでしょうか?
KSwordOfHaste

2017/06/22 22:23

Ubuntu16.04LTSでは/bin/shはdashというシェルです。dashではbrace expansionの機能はありませんので、cp [SOURCE]... [DIRECTORY]と書く方法になると思います。 あなたの環境の/bin/shが何かは自分にはわかりません。自分が確認できるのはUbuntu16.04LTSだけなのです。それしか持っていないので。 ご自分の環境の/bin/shの動作を確認するならcpではなくlsを用いてやってみるとよいと思います。 またman shとすればbrace expansionが使えるかどうか仕様を調べることができると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問