複数ディレクトリに含まれるファイルを圧縮するスクリプト@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つがはいるわけです。)
で、いろいろと思考錯誤したところ、以下のようなスクリプトになりました。
こんな感じのやつを
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
)
コメント 0