- PR -

シェルスクリプトで複数のディレクトリ配下にコピー

1
投稿者投稿内容
キック
常連さん
会議室デビュー日: 2005/04/26
投稿数: 44
投稿日時: 2006-11-30 14:07
お世話になります。

シェルスクリプトでファイルを複数のディレクトリ配下にコピーする
コマンドを追加していますが、なかなかうまくいきません。

単に「cp /tmp/last.html /var/www/html/*/*/」は違いますよね。
オプション「-p」とか「-pr」を付けてもうまくいきません。

どのような方法で複数のディレクトリ配下にコピー出来るのでしょうか?

ご教授よろしくお願い申し上げます。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-11-30 14:51
「コピー先が複数」であるのなら、複数回のコマンドを実行する必要があります。
キック
常連さん
会議室デビュー日: 2005/04/26
投稿数: 44
投稿日時: 2006-11-30 14:58
Edossonさん、ご回答ありがとうございます。

引用:

Edossonさんの書き込み (2006-11-30 14:51) より:
「コピー先が複数」であるのなら、複数回のコマンドを実行する必要があります。



コマンドを複数実行とは知っていますが、そのディレクトリは数百以上あるんで。
for関数でも考えていますが、数字ではないので。

以上、よろしくお願い申し上げます。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-11-30 15:04
数字だろうが文字だろうが、やることは同じですよ。

1.コピーするファイルを明確にする
2.コピー先ディレクトリの条件を明確にする。
3.指定したフォルダから、子フォルダを追跡できるプログラムを記述する。
4.取得したフォルダが、2の条件に合致するかどうか判定する。
5.4で、条件に合致する場合、ファイルをフォルダにコピーする。

番外・一度に考えることは、ひとつだけにする。

全部いっぺんに片づける、なんてことは、雲の上の人に任せておけばいいのです。
我々凡人は、ひとつひとつ問題を明確にして、
ひとつひとつ対処していくことによって、ゴールを目指しましょう。
温州蜜柑
ベテラン
会議室デビュー日: 2005/01/24
投稿数: 65
お住まい・勤務地: 東京都
投稿日時: 2006-11-30 15:15
こんな感じではダメですか?
($は半角に変換してください)

コード:
#----- dirsの中身 ここから -----
/home/user00
/home/user01
/home/user02
#----- dirsの中身 ここまで -----

#!/bin/sh

target=/tmp/last.html

for to_dir in `cat dirs`; do

	if [ -d $to_dir ]; then
		cp -p $target $to_dir/.
	else
		echo $to_dir is not found...
	fi

done

exit


SHR
ベテラン
会議室デビュー日: 2006/06/15
投稿数: 99
投稿日時: 2006-11-30 15:29
条件がイマイチ解りませんが、/var/www/htmlより2階層下のディレクトリへ
コピーすれば良いのでしたら単純に以下のように考えれば良いかと。
1. findで/var/www/html以下のディレクトリを探す
2. 1で求めた結果から正規表現にて"/var/www/html/[^/]*/[^/]*"に一致する物を探す
注:1で求めた結果の最後は/が付かないとする
3. 2で求めた結果に対して/tmp/last.htmlをコピーする

find /var/www/html -type d -regex "/var/www/html/[^/]*/[^/]*" -exec cp /tmp/last.html {} \;
※正規表現とfindのオプションはご確認下さい。

思いつきで書いてるので、もっとスマートな書き方があると思いますが。

キック
常連さん
会議室デビュー日: 2005/04/26
投稿数: 44
投稿日時: 2006-11-30 16:46
SHRさん、温州蜜柑さん、Edossonさん、ご回答ありがとうございます。

引用:

SHRさんの書き込み (2006-11-30 15:29) より:
条件がイマイチ解りませんが、/var/www/htmlより2階層下のディレクトリへ
コピーすれば良いのでしたら単純に以下のように考えれば良いかと。
1. findで/var/www/html以下のディレクトリを探す
2. 1で求めた結果から正規表現にて"/var/www/html/[^/]*/[^/]*"に一致する物を探す
注:1で求めた結果の最後は/が付かないとする
3. 2で求めた結果に対して/tmp/last.htmlをコピーする

find /var/www/html -type d -regex "/var/www/html/[^/]*/[^/]*" -exec cp /tmp/last.html {} ;
※正規表現とfindのオプションはご確認下さい。

思いつきで書いてるので、もっとスマートな書き方があると思いますが。





最終的にSHRさんのヒントでうまく出来ました。
色々、参考になり、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)