• ベストアンサー

コマンドライン処理に関しまして

ファイルを再起的に処理する場合、多くのコマンドのオプションとして $command -R といったものがありますが、特定のファイルないしディレクトリを除いて処理をしたい場合はどのような方法があるか教えていただけませんでしょうか。 以下に問題例を記載させていただきます。 /grandparent---/sample_d---file01           |        |-file02           |-/flog---file03           |     |-file04           |  (以下たくさんのファイル) という階層構造で、現在/grandparentのディレクトリにいる。 この状態で、flogを除いてすべてのディレクトリをgrand.aというアーカイブに入れる場合。 この問題を解く方法を是非教えてください。

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

  • ベストアンサー
  • noocyte
  • ベストアンサー率58% (171/291)
回答No.3

#2 です. > どうやら UNIX 系 OS のようですので, と書きましたが,そもそもここは「Linux系OS」でしたね.(^^; カテゴリ見ずに書いちゃったもんで….

damedamekun
質問者

お礼

回答してくださり、ありがとうございます。 以前までは、全体をアーカイブに入れてから、不要なものを抽出して、圧縮するといった行為でごまかしてきたのですが、noocyteさんから教授していただいた事をきっかけに、スクリプトを書こうと思います。 ありがとうございました。

その他の回答 (2)

  • noocyte
  • ベストアンサー率58% (171/291)
回答No.2

まず,どうして *.a ファイルなんでしょうか? *.a ファイルにはディレクトリ階層を収めることはできないので, この場合は使用できません.(それに,ファイル名の長さにも制限があります.) ディレクトリ階層を収めるには *.tar ファイルと tar コマンドを使ってください. どうやら UNIX 系 OS のようですので,階層ディレクトリの処理をするための find コマンドが使用できます.特定のディレクトリやファイルを除外するには -prune オプションを使ってください. # アーカイブに入れるファイル名のリストを /tmp/files.txt に作成する. # パス名が /grandparent に対する相対パスになるようにする. cd /grandparent find . \( -path ./flog -prune -o -type f -print \) > /tmp/files.txt # /tmp/files.txt 内のファイルをすべてアーカイブ /tmp/grand.tar に格納する. # ↓この -T オプションは GNU 版の tar コマンドでないと使えないかもしれない. tar cvf /tmp/grand.tar -T /tmp/files.txt GNU find コマンドのマニュアル http://www.linux.or.jp/JM/html/GNU_findutils/man1/find.1.html GNU tar コマンドのマニュアル http://www.linux.or.jp/JM/html/GNU_tar/man1/tar.1.html GNU ar コマンドのマニュアル http://www.linux.or.jp/JM/html/GNU_binutils/man1/ar.1.html

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

コマンド毎の問題なので、そのコマンドに別オプションがあればできる でしょうし、なければできません。 (ほとんどのコマンドにはそのような例外処理はついてないと 思いますが・・・) 基本的にはコマンドオプションでやらずに自分でシェルスクリプトを 書いて再起処理をすべきでしょう

damedamekun
質問者

お礼

回答してくださり、ありがとうございます。 参考になりました。

関連するQ&A