別のフォルダー内の各フォルダーに.zipファイルを作成するにはどうすればよいですか?


16

フォルダーの下 images\には、次のフォルダーがあります。

  • Usa\
  • Italy\
  • Japan\

等..

私が作成するスクリプトたい.zip私が持っているので、これらのフォルダのそれぞれのためにusa.zipitaly.zipjapan.zip

どうやってやるの?

回答:


9

バックスラッシュを使用しているため、これはWindowsであると想定しています。

7za.exe7-zipのコマンドラインバージョン)を取得して、に入れます%PATH%

次に、Images\ディレクトリ内でこれを実行します。

for /f "tokens=* usebackq" %G in (`dir /b /a:d "%cd%"`) do 7za a -r -tzip "%~G.zip" "%~G"

または、バッチスクリプトで:

for /f "tokens=* usebackq" %%G in (`dir /b /a:d "%cd%"`) do 7za a -r -tzip "%%~G.zip" "%%~G"

フォルダーの名前にスペースが含まれている場合、これは機能しません。
ジグガンジャー

@jiggunjerはい、そうです。フォルダー名のスペースで動作するように修正しました。
パラドロイド

1
これは、通常の7zip実行可能ファイルでも機能します。7zaを「C:\ Program Files \ 7-Zip \ 7z.exe」に更新しましたが、問題なく機能しました。
user1324161

7

これにはWinrarを使用できます。

すべてのフォルダーを選択し、右クリックしてを選択しますAdd to archive。次にPut each file to separate archive、タブの下のオプションを選択しますFiles

ここに画像の説明を入力してください

[OK]をクリックすると完了です。.rarではなく.zipファイルが必要な場合ZIPは、のGeneral下のタブで選択しますArchive format


7

Linuxを使用している場合、次のようなBashスクリプトを使用できます。

  #!/bin/bash

  IFS=$'\n'

  for f in $(find "$1" -mindepth 1 -maxdepth 1 -type d ); do
    zip -r "$f" "$f"
  done

このスクリプトは、最初の引数をフォルダー(この場合は画像)として受け取り、すべてのフォルダー(Usa、イタリア、および日本)を取得して同じ場所にzip圧縮するために1レベルだけ正確に再帰します。

古いzipファイルやソースフォルダーは削除されません。Zipは、既存のzipファイルを検出し、再実行時にそれらを更新するのに十分スマートです。ただし、ソースフォルダーのファイルを削除しても、zipファイルでは削除されません。事前に既存のファイルを削除することにより、この動作を回避できます。


sponiroが投稿したLinuxスクリプトを使用し、最初にフォルダーを削除する行を追加しました:find $ 1 -type d | xargs rm -rf
ジェネビッシュ

0

MvGによるこの回答は、Ubuntuでうまくいきました。

このループはbash次の場所で使用できます。

for i in */; do zip -r "${i%/}.zip" "$i"; done

iループ変数の名前です。*/は、現在のディレクトリのすべてのサブディレクトリを意味し、これらの名前の末尾にスラッシュが含まれます。cdこれを実行する前に、適切な場所にいることを確認してください。 "$i"末尾のスラッシュを含めて、単にそのディレクトリに名前を付けます。引用符は、ディレクトリ名の空白が問題を引き起こさないようにします。${i%/}のようなものです$iいますが、末尾のスラッシュが削除されているため、これを使用してzipファイルの名前を作成できます。

これがどのように機能するかを確認したい場合は、 echozip と、コマンドが実行される代わりに印刷されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.