こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

bushのプログラミングについて

をつかって、ディレクトリをコピーして、その中の いくつかを削除し 、その中のいくつかをものとのファイルへのリンクにしようと思っています。
ファイル構造は以下のような形です。

元々のディレクトリ

/TEST/A/ABC ーーーーリンクする
............./DEF ーーーー削除する
............./GHI ーーーーリンクする
............./JKL ーーーー残す
........../B ーーーーAと同じ構造
........../C ーーーーAと同じ構造
希望

/COPY/A/ABC ーーーー元へのリンク
.............../GHI ーーーー元へのリンク
.............../JKL ーーーーコピーされたデータ
........../B ーーーーAと同じ構造
........../C ーーーーAと同じ構造

勉強し始めたもののまだまだ、知識部足です。ご存じの方よろしくおねがいします。
現在ようやくわかったところは、
cp -r ~/test/ /copy/

for i in $( ls ~/copy/); do
....echo 1em:$i
.......for p in $( ls ~/copy/$i); do
...........# find *F | rm
...........# find ABC | ln -s ~/test/$i
.......done
done

というような感じです。なぜかスペースが入力されないので代わりに(.)をつかいました

投稿日時 - 2009-12-08 17:41:06

QNo.5507639

すぐに回答ほしいです

質問者が選んだベストアンサー

ファイルが、A B Cの直下にしかないのなら、つまりA B Cの下にサブディレクトリがないのなら、

for dir in A B C
do
mkdir /copy/$dir
ln -s ~/test/$dir/{ABC,GHI} /copy/$dir/
cp ~/test/$dir/*.erg /copy/$dir/
done

リンクしたいファイル名も、ABC GHIじゃなくて、パターンがあるならそれに置き換えればいいです。

投稿日時 - 2009-12-09 21:01:49

お礼

ありがとうございました。とくにFINDなどつかわなくてよかったんですね.

投稿日時 - 2009-12-09 23:04:55

ANo.4

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

「/test ディレクトリ以下にある, *.erg という名前のファイルをすべて /dest ディレクトリ以下にコピーする, ただしディレクトリ構造は保存する」
ということであれば
cd /test; find . -name "*.erg" | cpio -p /dest
とか
cd /test; find . -name "*.erg" | tar cf - -T - | tar xpf - -C /dest
あたりでしょうか.
「全てじゃない」場合には, 結局「コピーすべきファイルをどのように指定するのか」という問題が発生します.

投稿日時 - 2009-12-09 18:35:35

お礼

ありがとうございました!
助かりました!実現できました

投稿日時 - 2009-12-09 22:42:42

ANo.2

「ディレクトリごとにコピーしたいファイル名が違う場合」とありますが, 「どのディレクトリのどのファイルをコピーするのか」というのはだれがどのように指定するのでしょうか? あるいは, 「コピーすべきファイル」のファイル名に何か規則性はありますか?

投稿日時 - 2009-12-09 10:48:54

補足

ありがとうございます。
規則性はあります。コピーするファイル名はすべて。「.erg」で終わっています。例:rippre_b1.1aaaa.erg

ただ、それ以外にも、同じフォルダの中に「.erg.fal」で終わるものや、「erg.fal.neu」で終わるものもあります。どのディレクトリのどのファイルというのは、私の上司が決めています。融通は聞きます。
ただ、構造的には、/test/以下にディレクトリが数個あり、その中に、必要なファイルが入っています。よろしくお願いします。

投稿日時 - 2009-12-09 16:03:03

ANo.1

ABC DEF GHI JKL がファイルなのかディレクトリなのかわかりませんが、ファイルだとして進めます。
一旦コピーしてから消すのでなく、必要な物のみコピーします。
(1) ABC,GHI リンクする
(2) DEF 何もしない
(3) JKL コピーする

for dir in A B C
do
mkdir /copy/$dir
ln -s ~/test/$dir/{ABC,GHI} /copy/$dir/
cp ~/test/$dir/JKL /copy/$dir/
done

投稿日時 - 2009-12-08 21:53:24

補足

ありがとうございます.
すいません.ファイルとディレクトリの違いがたいして分からずに記入していました。
ABCなどは、ファイルです。失礼しました。とりあえずチャレンジしてみます!!

投稿日時 - 2009-12-08 22:20:23

お礼

無事作ることができました。

ただ一つうまく行かなかったことがありまして、
ディレクトリごとにコピーしたいファイル名が違う場合はどのようにしたらいいでしょうか?
/A/abc.erg
/A/abc.erg.fal
/B/def.erg
/B/def.erg.fal

のような場合で、/abc.erg /def.ergのみをコピーしたい場合です
find /abc/*erg | cp /copy/$dir/
のようにしたいのですが。もしよろしければたすけてください。

投稿日時 - 2009-12-09 00:20:29