Bash 查找没有附加webp后缀的jpg图像

Bash 查找没有附加webp后缀的jpg图像,bash,shell,find,batch-processing,webp,Bash,Shell,Find,Batch Processing,Webp,我有一个目录,在其他子目录中随机放置了几百万张图片。 我想通过附加webp扩展为所有jpg图像生成webp图像,而不考虑其他格式,如gif图像 我可以在Ubuntu18上运行下面的命令来生成我想要的所有webp图像,包括附加了.webp后缀的文件名: find /home/photos -type f \( -iname \*.jpg -o -iname \*.jpeg \) | parallel -eta cwebp {} -o {}.webp 但是,随着时间的推移,我会将其他jpg图像添加

我有一个目录,在其他子目录中随机放置了几百万张图片。 我想通过附加webp扩展为所有jpg图像生成webp图像,而不考虑其他格式,如gif图像

我可以在Ubuntu18上运行下面的命令来生成我想要的所有webp图像,包括附加了.webp后缀的文件名:

find /home/photos -type f \( -iname \*.jpg -o -iname \*.jpeg \) | parallel -eta cwebp {} -o {}.webp
但是,随着时间的推移,我会将其他jpg图像添加到其他一些子目录中,并且我希望再次运行相同的命令,只针对没有.webp后缀的新jpg图像

如果我有:

-- 1.png
-- 1.gif
-- 2.jpg
-- 2.jpg.webp
-- 3.jpg
-- subdir/4.jpg
-- subdir/5.jpg
-- subdir/5.jpg.webp
如何仅查找,
3.jpg
subdir/4.jpg
?(没有webp版本的)


此外,无法按时间进行搜索,因为新照片的修改时间可能比上次运行的旧。

要仅列出没有相应
.webp
文件的文件,可以使用
grep
,如下所示:

find /home/photos -type f \( -iname \*.jpg -o -iname \*.jpeg \) |
grep -vFxf <(find /home/photos -type f -name \*.webp | sed 's/\.webp$//')
find/home/photos-type f\(-iname\*.jpg-o-iname\*.jpeg\)|

grep-vFxf您可以在
parallel
中测试是否存在输出文件,并且仅在输出文件不存在时创建它,如下所示:

find . -iname \*.jpg | parallel -eta 'out={}.webp; [ ! -f "$out" ] && cwebp {} -o "$out"'
或者,完全一样,但我更努力地减少我的负面看法:

find . -iname \*.jpg | parallel -eta 'out={}.webp; [ -f "$out" ] || cwebp {} -o "$out"'

:-)

使用
touch
创建一个名为
LastRunTimeSentinel
的文件,然后再次运行
find
时,只查找比该文件更新的文件。日期不是选项,因为这些可能是我查找并添加回目录的带有几年前修改日期的旧照片。在比日期更新的版本上运行,在这些版本上不起作用。