저는 Ubuntu 14.04를 사용하고 있으며 종종 PrtScn(Print Screen) 키를 사용하여 스크린샷을 찍으면 다음과 같은 대화 상자가 나타납니다.
여기에서는 기본적으로 기본 파일 이름이 지정됩니다 Screenshot.png
. 그러나 해당 이름의 파일이 이미 존재하는 경우 gnome-screenshot
파일 이름은 자동으로 순차적으로 번호가 매겨져 제안됩니다 Screenshot-1.png
.
Screenshot
이제 파일 이름을 기준으로 삼고 싶지 않지만 mypic
. 기존 파일(예: )을 "확장"하여 저장 중인 파일의 파일 이름을 얻기 위해 해당 숫자를 자동으로 증가시키나요(이 경우 )?mypic%03d.png
mypic*
mypic010.png
mypic011.png
여기서는 단지 예를 제시한 것뿐입니다 gnome-screenshot
. 모든 GUI 파일 저장 대화 상자에 비슷한 내용이 있으면 좋겠습니다. 예를 들어 Geany에 텍스트 파일이 있고 "다른 이름으로 저장"을 입력하면 /tmp/mytext%03d.txt
시스템이 will 디렉토리 mytext*.txt
에 있는 기존 파일 의 최종 개수를 확인하고 /tmp
자동으로 1씩 증가한 후 해당 번호로 파일을 /tmp
디렉토리에 저장합니다.
이를 수행하는 표준이 있습니까? 그렇지 않은 경우 대체 해결 방법이 있습니까? 쉘 명령줄에 있다면 자동 증가 숫자 접미사를 계산하는 스크립트를 작성한 다음 $(get-next-num.sh /tmp/mytext%03d.txt)
파일 이름을 이와 유사한 것으로 바꿀 수 있지만 여기서 문제는 GUI 대화 상자에 있기 때문에 모든 GUI가 의심됩니다. 대화 상자는 이를 $(get-next-num.sh /tmp/mytext%03d.txt)
서브셸에서 코드로 실행하라는 명령 으로 해석합니다 .bash
답변1
한 가지 해결 방법은 잘 정의된 이름을 가진 새 파일을 수신하고 자동으로 이름을 바꾸는 일반 백그라운드 프로세스를 설정하는 것입니다. 이를 사용하여 생성되는 새 파일(특히 쓰기 위해 열었다가 닫는 경우) inotifywait
과 같은 디렉터리를 효과적으로 모니터링한 다음 파일이 다음 무료 파일인 경우 파일 이름을 바꿀 수 있습니다. 여기에 예가 있습니다. 대부분의 코드는 질문의 대상이 아닌 다음 무료 파일 이름을 찾는 함수입니다.~/Desktop
Screenshot.png
mytext999.txt
template
#!/bin/bash
# https://unix.stackexchange.com/a/418088/119298
# auto rename files when they are written to in watched directory
template(){
local file=$1 max=$2 suffix=$3 pat last next
pat="$file${max//9/[0-9]}$suffix"
for last in $pat; do : ; done
if [ "$last" = "$pat" ]
then next=${max//9/0} # no files, start from 0
else last="${last:${#file}:${#max}}"
[ "$last" = "$max" ] && return 1
printf -v next "%0${#max}d" $((10#$last+1))
fi
newfile="$file$next$suffix"
[ ! -e "$newfile" ]
}
cd ~/Desktop/
inotifywait -m -e close_write ~/Desktop/ |
while read dir event file
do case $file in
Screenshot.png) template mypic 999 .png || exit
mv "$file" "$newfile" ;;
esac
done