2016-04-04 12 views
2
bir kuantum kimyasal programı çalıştırırken bazı sorunlarla uğraşmak zorunda

üzerine onları kurtarmak için sürekli dizini tarayarak. Bu program çalışırken iki önemli dosya oluşturuyor gibi görünüyor, ancak bunları kullandıktan sonra doğrudan yeniden siler. Bu dosyalar bu konuda destek almak için önemlidir. Ama çok hızlı siliniyorlar ve bunları el ile kopyalayamıyorum. o ben sürekli bu dosyaların çalışma dizinini tarayan küçük bir senaryo düşünüyordum bu dosyaları kurtarmak gerektiğini programı anlatmak için bir yol var gibi görünüyor gibiözel dosyalar görünüm

. Oluşturulduklarında, bu programın bunları başka bir dizine veya başka bir dosya adına kopyalamasını istiyorum. Bu soruyu, erişebileceği herhangi bir programlama dili "CentOS 6.3 (Final) serbest" verdi etiketleri rağmen

- özel hakları olmadan normal kullanıcılar tamam.


Ben find -name ... containts bir süre döngü bu yapıyor ve dosya kopyalandı/bulundu eğer yankı düşünüyordum. Fakat bu yaklaşım benim için aptalca görünüyor ve daha iyi çözümler için bazı girdiler olmasını umuyorum. Ben kaydetmek istediğiniz

dosyaları filename.gcp.in.tmp ve filename.gcp.out.tmp bulunmaktadır.

+0

"Sürekli" ile "sürekli" demek istiyor musunuz? – khelwood

+0

@khelwood Gerçekten de ... üzgünüm. –

cevap

3

geçici dosyaları kapma için yararlı bir hile onlara sabit bağlantılar oluşturmaktır. Kopyalamadan daha iyi çalışır çünkü geçici dosyaların ne kadar büyük olduğu önemli değildir ve dosya tamamlanmadan önce bazı içeriklerin kopyalanmasıyla ilgili bir tehlike yoktur. Geçici bir dosya yaratan program silindiğinde, hard link geride kalır.

önceden geçici dosyaların isimlerini bilmiyorum ve bunu dosyaları oluşturulur dizinde bu yoklama döngü çalıştırmaktır yapmak inotify, olası bir yol kullanamıyorsanız:

while : ; do 
    for tmpfile in *.gcp.in.tmp *.gcp.out.tmp ; do 
     [[ -e $tmpfile ]] || continue 
     backupfile=$tmpfile.bak 
     [[ -e $backupfile ]] || ln -- "$tmpfile" "$backupfile" 
    done 
done 

Dosya adlarını önceden biliyorsanız ve bunları oluşturan program, bunları yazmak için açar, kapatır ve siler, döngü olmadan da yapabilirsiniz. Programınızı çalıştırmadan önce bunu yapın: Program Çalışması tamamlandıktan sonra geçici dosyaların

touch filename.gcp.in.tmp filename.gcp.out.tmp 
ln filename.gcp.in.tmp filename.gcp.in.tmp.bak 
ln filename.gcp.out.tmp filename.gcp.out.tmp.bak 

içerikleri .bak dosyalarında olmalıdır.

2

Bunu ve it seems to be built into CentOS 6.3 için Inotify kullanabilirsiniz. (a tutorial where you'll find more details alınan) Örneğin

:

while true #run indefinitely 
do 
inotifywait -r -e modify,attrib,close_write,move,create,delete /dir && /bin/bash backup-script 
done 

backup-script istediğiniz dosyaların oluşturulmasını doğrulamak için kullanabilir ve başka yerde onları kopyalamak istiyorum odur. incron'u da kullanabilirsiniz.

+0

Bunu gösterdiğiniz için teşekkür ederim, ancak konsoldan inotifywait özelliğini kullanmak bana bulunamadı. Muhtemelen mümkün olmayan (?) Yüklemem gerekiyor. –

+0

Inotify-tools paketini kurmanız gerekebilir, ancak bağlantı kurduğum öğreticide bunu EPEL deposundan yükledim. –