이미지 목록이 포함된 파일을 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기존 구성은 10분의 1초마다 실행을 시도합니다. 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.

관련 정보