假设我有一个文件images.txt
,其中包含例如
image1.jpg
image2.jpg
image3.jpg
然后我通过管道传输images.txt
到sxiv
,我希望缩略图视图立即反映更改。我尝试过这个:
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
.