web-dev-qa-db-ja.com

dir内のファイルごとに1つのZipファイルを作成します

私が使用するファイルを圧縮するには:

 Zip -r 1.Zip 1.graffle

これは期待どおりに機能します。しかし、Zipを変更して、各Zipファイルが1:1マッピングである現在のフォルダー内の各ドキュメントをZipするにはどうすればよいですか。つまり、すべてのファイルが1つのZipファイルに追加されるわけではありません。

これを達成するために次のコマンドを修正できますか? ":

Zip -r files.Zip .
2
blue-sky

ファイルごとに1回Zipを呼び出すことができます。

for f in *.graffle; do Zip -r "${f%%.*}.Zip" "$f"; done

これはすべての.graffleファイルに対して実行され、それぞれでZipを呼び出します。アーカイブ名は、ファイル名から.graffle拡張子を引いたものに基づいて設定されます。拡張子は 文字列操作 で削除されます。

複数の拡張子のファイルを圧縮する場合は、それらを先頭に追加するだけです。 for f in *.graffle *.jpgなど。

一度に1つのファイルを処理するため、これは少し遅い場合があることに注意してください。 GNU parallelbrew install parallelを使用して Homebrew 経由でインストールできます):

parallel 'Zip -r {.}.Zip {}' ::: *.graffle

これにより、複数のコアを使用してすべてのZipコマンドが並行して実行されるため、ファイルが多い場合ははるかに高速になります。ここで、{.}は入力ファイル名から拡張子を削除し、{}はファイル名自体に置き換えられます。

3
slhck