Editörler bir dosyayı kaydetmek için çeşitli stratejileri takip edebilir. İki büyük varyant mevcut dosyanın üzerine yazmak veya yeni bir dosyaya yazmak ve yerine taşımaktır. Yeni bir dosyaya yazmak ve onu taşımak, herhangi bir zamanda dosyadan okumak size dosyanın tam bir sürümünü (bir an eski, bir sonraki an, yeni bir) veren güzel bir özelliğe sahiptir. Dosyanın üzerine yazılırsa, eksik bir süre vardır, bu da başka bir programın dosyaya erişmesi veya sistem çökmesi durumunda sorunludur.
Nano görünüşe göre mevcut dosyanın üzerine yazıyor. Komut dosyanız, yazmayı ( close_write
olay) tamamladığında noktayı algılar ve rsync
o noktada çalışır . Rsync'in işini ilk kayıttan tamamlamadan önce, iki kez hızlı bir şekilde kaydederseniz, rsync'in dosyanın eksik bir sürümünü alabileceğini unutmayın.
Öte yandan Vim, yaz-sonra-taşı stratejisini kullanır -
echo 'new content' >somefile.new
mv -f somefile.new somefile
Dosyanın eski sürümüne olan şey, yeni sürümün yerine taşındığı noktada silinmesidir. Bu noktada inotifywait
komut geri döner, çünkü izlemesi söylenen dosya artık mevcut değildir. (Yeni somefile
, aynı ada sahip farklı bir dosyadır.) Vim bir yedekleme dosyası yapmak üzere yapılandırılmış olsaydı, ne olurdu
echo 'new content' >somefile.new
ln somefile somefile.old
mv -f somefile.new somefile
ve inotifywait
şimdi yedeklemeyi izliyor olacaklardı.
Dosya kaydetme stratejileri hakkında daha fazla bilgi için bkz. Bir program çalışırken canlı güncelleştirme nasıl yapılabilir? ve Dosya izinleri ve kaydetme
Vim'in üzerine yazma stratejisini kullanması söylenebilir: backupcopy
( :set nobackupcopy
) seçeneğini kapatın . Yukarıda belirtildiği gibi bu risklidir.
Stratejileri tasarrufu hem işlemek için dizin izlemek ve her iki filtre close_write
ve moved_to
olayları somefile
.
inotifywait -m -e close_write,moved_to --format %e/%f . |
while IFS=/ read -r events file; do
if [ "$file" = "somefile" ]; then
…
fi
done