SSブログ

複数ディレクトリに含まれるファイルを圧縮するスクリプト@cygwin [cygwin]

cygwinで複数のディレクトリに含まれているファイルをディレクトリごとに圧縮するスクリプト

こんな感じのやつを
ParentDir
├─DirA
│ ├─fileA.1
│ ├─fileA.2
│ └─fileA.3
├─DirB
│ ├─fileB.1
│ ├─fileB.2
│ └─fileB.3
└...

こんな感じに圧縮したいわけです。
ParentDir
├─DirA.zip (fileA.1、fileA.2、fileA.3を含む)
├─DirB.zip (fileB.1、fileB.2、fileB.3を含む)
└...

cygwinでスクリプトを書くときに厄介なのは、Windowsではディレクトリやファイルの名前にスペースが含まれること。
ディレクトリにスペースが入っている場合、for dir in `find . -type d`でまわすとdirに入るディレクトリ名はスペースで区切られたものが入るためにうまいこと処理できない。("Documents and Settings"ディレクトリの場合、dirには"Documents"と"and"と"Settings"の3つがはいるわけです。)
で、いろいろと思考錯誤したところ、以下のようなスクリプトになりました。
#!/usr/bin/bash
find . -type d ! -name "." |
(
    while read dir
    do
        echo "${dir}.zip"
        /usr/bin/zip "${dir}.zip" "${dir}"/*
    done
)



nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。