2017-09-18 6 views
0

特定のファイルタイプのすべてのファイルをサブフォルダごとに1つのzipファイルにアーカイブする方法を探しています。シェルスクリプトまたはAppleScriptを使用してサブフォルダ内の特定のファイルタイプのすべてのファイルをサブフォルダごとに1つのファイルに圧縮


マイフォルダ構造は次のとおりです。

各フォルダやサブフォルダまたはサブサブフォルダに
/path/to 
    └── TopLevel 
     ├── SubLevel1 
     │   ├── SubSubLevel1 
     │   ├── SubSubLevel2 
     │   └── SubSubLevel3 
     ├── SubLevel2 
     │   ├── SubSubLevel1 
     │   ├── SubSubLevel2 
     │   └── SubSubLevel3 
     ├── SubLevel3 
     │   ├── SubSubLevel1 
     │   └── SubSubLevel2 
     └── SubLevel4 

は、ファイルの種類のファイルがある* .abc、* .xyzと* .001〜* .999と、これらのすべてのファイルをフォルダごとに1つのzipファイルに圧縮したい、つまり "TopLevel"の "SubLevel1"のフォルダ "SubSubLevel1"の指定されたタイプのすべてのファイルをパッケージ化する必要があります1つのファイル "Sub SubSubLevel1 "フォルダ内の" SubLevel1_data.zip "を選択します。上記の検索基準と一致しないこれらのフォルダ内の他のすべてのファイルは、同じディレクトリに解凍したままにしておく必要があります。

私はいくつかのアイデアを見つけましたhereまたはhereしかし、どちらの方法もファイルのアーカイブ方法に基づいていますが、これまでのところ私はシェルスクリプティングに慣れていないので、 。私もAppleScriptを使って解決策を見つけようとしましたが、フォルダ内のすべてのファイルを拡張子(* .001〜* .999)で取得する方法に問題があります。 RegExでは、 ".abc | .xyz。\ d \ d \ d"といった特定のファイルタイプの検索をカバーするようなことをやっていますが、AppleScriptでgrepの結果をどのように実装するかもわかりません。

誰かが私のアーカイブの問題に対処する方法を知っている必要があります。事前におかげさまでありがとうございます。

答えて

0

私の周りのいくつかの演奏には、次の解決策を考え出した後:

#!/bin/bash 

shopt -s nullglob 

find -E "$PWD" -type d -maxdepth 1 -regex ".*201[0-5][0-1][0-9].*" -print0 | while IFS="" read -r -d "" thisFolder ; do 
    echo "The current folder is: $thisFolder" 
    to_archive=("$thisFolder"/*.[Aa][Bb][Cc] "$thisFolder"/*.[Xx][Yy][Zz] "$thisFolder"/*.[0-9][0-9][0-9]) 

    if [ ${#to_archive[@]} != 0 ] 
    then 
    7z a -mx=9 -uz1 -x!.DS_Store "$thisFolder"/"${thisFolder##*/}"_data.7z "${to_archive[@]}" && rm "${to_archive[@]}" 
    fi 

    find "$thisFolder" -type d -mindepth 1 -maxdepth 1 -print0 | while IFS="" read -r -d "" thisSubFolder ; do 
    echo "The current subfolder is: $thisSubFolder" 
    to_archive=("$thisSubFolder"/*.[Aa][Bb][Cc] "$thisSubFolder"/*.[Xx][Yy][Zz] "$thisSubFolder"/*.[0-9][0-9][0-9]) 

    if [ ${#to_archive[@]} != 0 ] 
    then 
     7z a -mx=9 -uz1 -x!.DS_Store "$thisSubFolder"/"${thisSubFolder##*/}"_data.7z "${to_archive[@]}" && rm "${to_archive[@]}" 
    fi 
    done 
done 

私のスクリプトは、サブフォルダとサブサブフォルダを反復処理するループのネストされた2があります。 "find"では、2010-2015年のフォルダのみをバックアップするための正規表現パターンを探します。フォルダ内の指定された拡張子に一致するすべてのファイルは、フォルダごとに1つのターゲットアーカイブに圧縮されます。

関連する問題