shell 脚本压缩图片
时间: 2023-11-12 16:08:22 浏览: 148
您可以使用以下步骤来编写一个shell脚本来压缩图片:
1. 创建一个新的shell脚本文件,例如compress_images.sh。
2. 在脚本中添加以下代码来查找60分钟以内曾被修改过的图片文件,并且大于100kb的图片才会进行压缩:
```
#!/bin/bash
find /path/to/images -type f -mmin -60 -size +100k \( -name "*.jpg" -o -name "*.png" \) -print0 | while read -d $'\0' file
do
# 压缩图片的代码
done
```
3. 在while循环中添加压缩图片的代码。您可以使用sips命令来压缩图片。例如,以下代码将压缩png格式的图片:
```
sips -s format png -Z 1024 "$file" --out "${file%.*}_compressed.png"
```
这将把图片压缩到1024像素的宽度,并将其保存为原始文件名加上"_compressed"的新文件。
4. 保存并关闭脚本文件。
5. 在终端中运行以下命令来使脚本文件可执行:
```
chmod +x compress_images.sh
```
6. 运行脚本文件:
```
./compress_images.sh
```
这将在指定的路径中查找并压缩符合条件的图片文件。
相关问题
用linux shell 并发压缩多层目录下的图片的脚本,压缩图片保存到另一目录中,
可以使用 `find` 命令找到多层目录下的所有图片,然后使用 `xargs` 命令调用 `gzip` 进行压缩。可以通过 `nohup` 命令将该命令放入后台执行,并将输出重定向到一个日志文件中。
以下是一个示例脚本:
```bash
#!/bin/bash
# 设置要压缩的文件类型
filetype="*.jpg *.jpeg *.png"
# 设置要搜索的起始目录和压缩后保存的目录
search_dir="/path/to/search"
compress_dir="/path/to/compress"
# 找到所有要压缩的文件并压缩
find "$search_dir" -type f -name "$filetype" -print0 | xargs -0 -P 4 -I {} sh -c 'gzip -c {} > "$compress_dir/$(basename {}).gz"'
# 将输出重定向到日志文件中
nohup ./compress.sh > compress.log &
```
在上面的脚本中,`-P` 参数指定了要启动的并发进程数,这里设置为 4。通过 `basename` 命令获取文件名,然后将压缩后的文件保存到指定目录中,并以 `.gz` 扩展名结尾。
你可以根据需要修改 `filetype`、`search_dir` 和 `compress_dir` 变量来适应你的需求。
用linux shell 并发压缩多级目录下的图片的脚本,压缩图片保存到另一目录中,并保持目录结构
可以使用 `find` 命令来遍历多级目录下的图片文件,然后使用 `tar` 命令进行压缩,最后将压缩文件保存到另一目录中并保持目录结构。
以下是一个示例脚本:
```bash
#!/bin/bash
# 原始图片目录
src_dir="/path/to/src_dir"
# 压缩后的图片保存目录
dst_dir="/path/to/dst_dir"
# 并发压缩的进程数
num_procs=4
# 查找原始图片目录下的所有图片文件,并将文件名保存到数组中
files=($(find "$src_dir" -type f \( -iname "*.png" -o -iname "*.jpg" -o -iname "*.jpeg" \)))
# 创建保存压缩文件的目录结构
mkdir -p "$dst_dir"
# 并发压缩图片
for (( i=0; i<${#files[@]}; i+=num_procs )); do
# 获取要压缩的文件列表
file_list="${files[@]:i:num_procs}"
# 使用 xargs 将文件列表作为参数传递给 tar 命令,并在后台运行
echo "${file_list[@]}" | xargs -P "$num_procs" -I % bash -c 'tar -czf "$dst_dir/${%/##*/}.tar.gz" "$@"' _ %
done
```
说明:
- `find "$src_dir" -type f \( -iname "*.png" -o -iname "*.jpg" -o -iname "*.jpeg" \)` 查找 `$src_dir` 目录下所有类型为 PNG、JPG 和 JPEG 的图片文件,并将文件名保存到数组 `files` 中。
- `mkdir -p "$dst_dir"` 创建保存压缩文件的目录结构,如果目录已经存在则不会报错。
- `for (( i=0; i<${#files[@]}; i+=num_procs ))` 循环遍历 `files` 数组,每次取出 `num_procs` 个文件进行压缩。
- `echo "${file_list[@]}" | xargs -P "$num_procs" -I % bash -c 'tar -czf "$dst_dir/${%/##*/}.tar.gz" "$@"' _ %` 使用 `xargs` 命令将 `file_list` 数组中的文件名作为参数传递给 `tar` 命令,并在后台执行。其中 `${%/##*/}` 表示从文件路径中获取文件名,`-P "$num_procs"` 表示并发执行的进程数,`-I %` 表示将参数替换为 `%`,`_ %` 表示将 `_` 作为命令的 `$0` 参数,`"$@"` 表示将所有参数传递给 `tar` 命令。
阅读全文