【发布时间】:2021-05-23 12:21:01
【问题描述】:
我有这个文件夹结构,每个子文件夹中都有非常重的高质量图像
tree -d ./
输出:
./
├── 1_2dia-pedro
├── 3dia-pedro
│ ├── 101MSDCF
│ └── 102MSDCF
├── 4dia-pedro
└── Wagner
├── 410_0601
├── 411_0701
├── 412_0801
├── 413_2101
├── 414_2801
├── 415_0802
├── 416_0902
├── 417_1502
├── 418_1602
├── 419_1702
├── 420_2502
└── 421_0103
18 directories
而且,我想压缩它,就像我对 ffmpeg 或 imagemagick 所做的那样。 例如,
ffmpeg -i %%F -q:v 10 processed/%%F"
mogrify -quality 3 $F.png
我目前正在考虑使用 shopt 创建目录向量,as discussed here
shopt -s globstar dotglob nullglob
printf '%q\n' **/*/
然后,创建一个新的文件夹压缩,具有相同的结构
mkdir folder-compressed
<<iterate the array-vector-out-of-shopt>>
最后,为每个子文件夹压缩in the lines of
mkdir processed
for f in *.jpg;
do ffmpeg -i "$f" -q:v 1 processed/"${f%.jpg}.jpg";
done
另外,我读过this question,这个过程似乎接近我想要的,
for f in mydir/**/*
do
# operations here
done
主要问题:我是 bash 新手。我知道我可以使用所有需要的工具!
编辑:a program 用于压缩具有无损质量的图像的特定目的,为我们提供了一个 a-liner,并为这种压缩提供了很多选项。警告:制作原始文件夹结构文件的另一个副本,因为它会在您提供的文件夹结构文件中永久更改它们。
cp -r ./<folder-structure-files> ./<folder-structure-files-copy>
image_optim -r ./<folder-structure-files-copy>
不过,我认为@m0hithreddy 解决方案非常酷。当然,我很快就会在其他地方使用这种逻辑。
【问题讨论】:
-
您在这里混合了 bash 和批处理语法。你想用哪种语言来做这件事?而且,如果您的目录看起来像这样,则不需要递归。
-
它在 bash 中,独一无二。我编辑了帖子,以使其明确。谢谢。关于递归的必要性:我将在一个文件夹的顶层运行脚本,该文件夹有 5 个其他子文件夹,其中一些有子子文件夹。所以,我认为递归是一个完美的选择——我想要类似于 $(cp -r) 的行为。当然,在这种情况下,我正在应用压缩,而不仅仅是复制文件
标签: linux bash recursion image-processing terminal