inotifywaitについて学習しようとしています。インストールしましたinotify-tools:
Start-Date: 2019-08-31 18:11:48
Commandline: apt install inotify-tools
Requested-By: dkb (1000)
Install: inotify-tools:AMD64 (3.14-7), libinotifytools0:AMD64 (3.14-7, automatic)
End-Date: 2019-08-31 18:11:58
このスクリプトjl.shを作成して、変更されたファイルを〜/ Desktop/vvtempから〜/ Publicにコピーし、タイムスタンプを付けますコピーされたファイル:
#!/bin/bash
dir_to_watch="/home/dkb/Desktop/vvtemp/"
inotifywait -m -e modify --format '%w%f' "${dir_to_watch}" | while read line
do
s=$line
newname=/home/dkb/Public/$(date +%Y%m%d%H%M%S)"-${s##*/}"
cp $line $newname
done
test.txtというファイルを作成し、1つのターミナルでスクリプトを開始しました。エラーや警告はありませんでした。
別の端末でtest.txtをnanoで開いて編集し、保存して、一度だけ閉じました。
次に、同じファイルをgeditおよびgeanyを使用して編集しました
ターゲットフォルダー内のファイルのリスト〜/ Publicを確認しました。
dkb@Udin:~/Public$ ll
total 36
drwxr-xr-x 2 dkb dkb 4096 Aug 31 18:27 ./
drwxr-xr-x 17 dkb dkb 4096 Aug 31 18:08 ../
-rw-r--r-- 1 dkb dkb 1024 Aug 31 18:24 20190831182416-.test.txt.swp
-rw-r--r-- 1 dkb dkb 1024 Aug 31 18:24 20190831182419-.test.txt.swp
-rw-r--r-- 1 dkb dkb 159 Aug 31 18:24 20190831182441-test.txt
-rw-r--r-- 1 dkb dkb 179 Aug 31 18:26 20190831182619-.goutputstream-QN1A7Z
-rw-r--r-- 1 dkb dkb 198 Aug 31 18:26 20190831182638-.goutputstream-UDEB7Z
-rw-r--r-- 1 dkb dkb 210 Aug 31 18:27 20190831182722-.goutputstream-0X2K7Z
-rw-r--r-- 1 dkb dkb 221 Aug 31 18:27 20190831182733-.goutputstream-01D86Z
dkb@Udin:~/Public$
最初の3つのファイルはtest.txtとnanoの編集と保存に関連しています。最初の2つのファイルには。swpサフィックスが付いています。 3番目のファイルは、目的のタイムスタンプ付きのファイル名を持つ目的のファイルです。
次に、同じファイルをgeditまたはgeanyで編集してみました。これらのエディターは、ファイルを変更して保存するたびに1つずつバックアップファイルを作成しましたが、作成されたバックアップには、意図したコンテンツが含まれていましたが、ファイル名は20190831182733-.goutputstream-01D86Zでした。タイムスタンプは守られているようですが、「ベース名」は守られていません。
私の質問は:
nanoを使用すると、なぜ。swpinotifywaitによって2つのファイルが作成されるのですか?
geditまたはgeanyを使用すると、意図した名前が生成されないのはなぜですか?
/ etc/nanorcまたは〜/ .nanorcまたは$ XDG_CONFIG_HOME/nano/nanorcまたは〜/ .config/nano/nanorcで「ロックの設定」をコメント
## Enable vim-style lock-files. This is just to let a vim user know you
## are editing a file [s]he is trying to edit and vice versa. There are
## no plans to implement vim-style undo state in these files.
#set locking
Inotifyをデバッグすると、geditがテストを変更しないことがわかります。
OPEN test
CREATE .goutputstream-F4776Z
OPEN .goutputstream-F4776Z
ATTRIB .goutputstream-F4776Z
CLOSE_WRITE:CLOSE test
MODIFY .goutputstream-F4776Z
MOVED_FROM .goutputstream-F4776Z
MOVED_TO test
CLOSE_WRITE:CLOSE test
OPEN test
ACCESS test
CLOSE_NOWRITE:CLOSE test
ただし、どちらもイベント「close_write」を使用するか、inotifyイベントに従って、バックアップの場所で手順を再作成できます。