私はこの質問が以前にここで尋ねられたことを認めます:
のように 別々のファイルに圧縮 質問した人が使用したOSを指定せず、回答を受け取っていません。
巨大なディレクトリを、相互に依存しない複数の.Zipファイルに分割する必要があります。したがって、代わりに:
file1.Zip
file2.z01
file3.z02代わりに、次のファイルセットが必要です。
file1.Zip
file2.Zip
file3.Zip
基本的にこれは私の質問です。私はOSXを使用しているので、シェルスクリプトまたはAppleScriptが最も簡単な方法です。
さらに、同じことを尋ねた人がいます-彼だけが.tarアーカイブを作成したかったのです:方法 ファイルのセットに対して別々のアーカイブを作成する
答えは正しいですが、tarファイルになります。
for file in `ls *`; do tar -czvf $file.tar.gz $file ; done
PS:この最後の部分は、KeyboardMaestroに慣れている人のためのものです。
また、Keyboard Maestroでこれを実行しようとしました。ファイルパスを決定し、シェルスクリプトをトリガーする「foreach」アクションセットアップがあります。出力は正しく、ターミナルに貼り付けるとマクロが機能します(例:Zip /Users/me/Desktop/test /Users/me/Desktop/test.txt
)。
ただし、Keyboard Maestroのシェルスクリプトに2つの変数を渡すと、機能しません。Zip "$KMVAR_zipPath" "$KMVAR_sourcePath"
解決策は非常に簡単です。すべてのファイルに対してこれを再帰的に実行する場合は、find
を使用します。すべてのファイルとディレクトリがサブディレクトリに降順で一覧表示されます。
find . -type f -execdir Zip '{}.Zip' '{}' \;
説明:
.
です。-type f
)-execdir
オプションを使用すると、見つかった各ファイルに対してコマンドを実行し、ファイルのディレクトリから実行できます。Zip file.txt.Zip file.txt
として評価されます。これは、{}
のすべての出現箇所が実際のファイル名に置き換えられるためです。このコマンドは\;
で終了する必要がありますもちろん、find
にはもっと多くのオプションがあります。代わりに、サブディレクトリに降順ではなく、現在のディレクトリにとどまりたい場合:
find . -type f -maxdepth 1 -execdir Zip '{}.Zip' '{}' \;
特定のファイルタイプに制限する場合は、-name
オプション(または大文字と小文字を区別しない照合の場合は-iname
)を使用します。
find . -type f -name "*.txt" …
それ以外のもの(ls *
の出力をfor
でループすることを含む)は、私の意見ではかなり醜い構文であり、壊れそうです。名前にスペースが含まれているファイル、または引数が多すぎるファイル。