• ベストアンサー

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

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

ファイルが、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じゃなくて、パターンがあるならそれに置き換えればいいです。

kenpanch7
質問者

お礼

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

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

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

kenpanch7
質問者

お礼

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

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

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

kenpanch7
質問者

補足

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

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.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

kenpanch7
質問者

お礼

無事作ることができました。 ただ一つうまく行かなかったことがありまして、 ディレクトリごとにコピーしたいファイル名が違う場合はどのようにしたらいいでしょうか? /A/abc.erg /A/abc.erg.fal /B/def.erg /B/def.erg.fal のような場合で、/abc.erg /def.ergのみをコピーしたい場合です find /abc/*erg | cp /copy/$dir/ のようにしたいのですが。もしよろしければたすけてください。

kenpanch7
質問者

補足

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

関連するQ&A