将包含图像列表的文件传输到 sxiv 并立即反映更改

将包含图像列表的文件传输到 sxiv 并立即反映更改

假设我有一个文件images.txt,其中包含例如

image1.jpg
image2.jpg
image3.jpg

然后我通过管道传输images.txtsxiv,我希望缩略图视图立即反映更改。我尝试过这个:

watch -n 0.1 'cat images.txt | sxiv -i -t'

但是,如果我更改images.txt并保存它(例如通过添加或删除图像文件名),sxiv 中的缩略图视图不会更新。

我猜我的管道结构有问题。这样做的正确方法是什么?

答案1

cat images.txt | sxiv -i -t您现有的构造将尝试每十分之一秒运行一次。如果sxiv做任何事情都需要比这更长的时间,事情可能会变得非常混乱。您最好查看所有图像的校验和的哈希值:

$ md5sum *.jpg | md5sum
4a009e73fb133d2d103dd2e65ef8c605  -

这需要所有的哈希值.jpg文件的哈希值,并生成以下哈希值。这意味着如果任何图像发生更改以及添加或删除任何图像,则附加校验和将会更改。

所以我们可以这样做:

#!/bin/bash
old_checksum="$(md5sum *.jpg | md5sum)"
while /bin/true; do
    new_checksum="$(md5sum *.jpg | md5sum)"
    if [[ "$new_checksum" != "$old_checksum" ]]; then
        old_checksum="$new_checksum"
        find . -maxdepth 1 -name \*.jpg -print0 | xargs -0 sxiv -i -t
    fi
    sleep 1
done

每当有任何变化时,记下新的校验和,然后重新运行sxiv

如果您仍然想保留.jpg文件目录images.txt,可以轻松修改为使用该文件的内容来创建校验和并提供参数来xargs代替find.

相关内容