Under the folder images\
, I have the following folders:
Usa\
Italy\
Japan\
etc..
I want a script that creates a .zip
for each of these folders, so I have usa.zip
, italy.zip
, japan.zip
.
How can I do that?
You can use Winrar for this.
Select all your folders, right click and select Add to archive
. Now select the option Put each file to separate archive
under the tab Files
:
Click OK and you're done. If you want .zip files instead of .rar, just select ZIP
in the General
tab under Archive format
.
I assume this is Windows, as you are using backslashes.
Get 7za.exe (the command-line version of 7-zip) and put it in your %PATH%
.
Then run this within your Images\
directory:
for /f "tokens=* usebackq" %G in (`dir /b /a:d "%cd%"`) do 7za a -r -tzip "%~G.zip" "%~G"
Or in a batch script:
for /f "tokens=* usebackq" %%G in (`dir /b /a:d "%cd%"`) do 7za a -r -tzip "%%~G.zip" "%%~G"
dir /b /a:d "%cd%"
) do 7z a -r -tzip "%~G.zip" "%~G" without issues. Exactly what I was looking for!
Assuming you are on Linux you could use a Bash script like this:
#!/bin/bash
IFS=$'\n'
for f in $(find "$1" -mindepth 1 -maxdepth 1 -type d ); do
zip -r "$f" "$f"
done
This script will take the first argument as folder, in this case images, and recurse exactly one level deep to get all your folders (Usa, Italy and Japan) and zip them in the same place.
It will not delete old zip files or the source folders. Zip is smart enough to detect existing zip files and update them when run again. However, if you delete a file in the source folders it will not be deleted in the zip files. You might circumvent this behaviour by deleting existing files beforehand.
This answer by MvG worked for me on Ubuntu:
You can use this loop in
bash
:for i in */; do zip -r "${i%/}.zip" "$i"; done
i
is the name of the loop variable.*/
means every subdirectory of the current directory, and will include a trailing slash in those names. Make sure youcd
to the right place before executing this."$i"
simply names that directory, including trailing slash. The quotation marks ensure that whitespace in the directory name won't cause trouble.${i%/}
is like$i
but with the trailing slash removed, so you can use that to construct the name of the zip file.If you want to see how this works, include an
echo
before thezip
and you will see the commands printed instead of executed.