GUIダイアログでファイル名の自動順番番号付け(保存)?

GUIダイアログでファイル名の自動順番番号付け(保存)?

私はUbuntu 14.04を使用していますが、PrtScn(Print Screen)キーを使ってスクリーンショットを撮ると、次のダイアログボックスが表示されます。

GNOMEスクリーンショット

ここではデフォルトでデフォルトのファイル名が指定されますScreenshot.png。ただし、その名前のファイルがすでに存在する場合、gnome-screenshotファイル名は自動的に順番に番号付けされて提案されますScreenshot-1.png

Screenshot今、ファイル名に基づいてしたくありませんがmypic。既存のファイル(たとえば)を「拡張」して、保存されているファイルのファイル名を取得するためにその数を自動的に増やしますか(この場合)?mypic%03d.pngmypic*mypic010.pngmypic011.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

1つの回避策は、明確に定義された名前の新しいファイルを受け取り、自動的に名前を変更する一般的なバックグラウンドプロセスを設定することです。これを使用して作成される新しいファイル(特に書き込み用に開いたり閉じたりした場合)などのディレクトリをinotifywait効果的に監視し、ファイルが次の無料ファイルの場合はファイル名を変更できます。ここに例があります。ほとんどのコードは、質問の対象ではなく、次の無料のファイル名を見つける関数です。~/DesktopScreenshot.pngmytext999.txttemplate

#!/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

おすすめ記事