- ベストアンサー
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 というような感じです。なぜかスペースが入力されないので代わりに(.)をつかいました
- みんなの回答 (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じゃなくて、パターンがあるならそれに置き換えればいいです。
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
「/test ディレクトリ以下にある, *.erg という名前のファイルをすべて /dest ディレクトリ以下にコピーする, ただしディレクトリ構造は保存する」 ということであれば cd /test; find . -name "*.erg" | cpio -p /dest とか cd /test; find . -name "*.erg" | tar cf - -T - | tar xpf - -C /dest あたりでしょうか. 「全てじゃない」場合には, 結局「コピーすべきファイルをどのように指定するのか」という問題が発生します.
お礼
ありがとうございました! 助かりました!実現できました
- Tacosan
- ベストアンサー率23% (3656/15482)
「ディレクトリごとにコピーしたいファイル名が違う場合」とありますが, 「どのディレクトリのどのファイルをコピーするのか」というのはだれがどのように指定するのでしょうか? あるいは, 「コピーすべきファイル」のファイル名に何か規則性はありますか?
補足
ありがとうございます。 規則性はあります。コピーするファイル名はすべて。「.erg」で終わっています。例:rippre_b1.1aaaa.erg ただ、それ以外にも、同じフォルダの中に「.erg.fal」で終わるものや、「erg.fal.neu」で終わるものもあります。どのディレクトリのどのファイルというのは、私の上司が決めています。融通は聞きます。 ただ、構造的には、/test/以下にディレクトリが数個あり、その中に、必要なファイルが入っています。よろしくお願いします。
- notnot
- ベストアンサー率47% (4900/10358)
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
お礼
無事作ることができました。 ただ一つうまく行かなかったことがありまして、 ディレクトリごとにコピーしたいファイル名が違う場合はどのようにしたらいいでしょうか? /A/abc.erg /A/abc.erg.fal /B/def.erg /B/def.erg.fal のような場合で、/abc.erg /def.ergのみをコピーしたい場合です find /abc/*erg | cp /copy/$dir/ のようにしたいのですが。もしよろしければたすけてください。
補足
ありがとうございます. すいません.ファイルとディレクトリの違いがたいして分からずに記入していました。 ABCなどは、ファイルです。失礼しました。とりあえずチャレンジしてみます!!
お礼
ありがとうございました。とくにFINDなどつかわなくてよかったんですね.