Dosyaları, arşivdeki değişiklik zaman damgasının ayıklanan kopyalarda korunmadığı şekilde çıkardıysanız (ancak ayıklanan dosyalar normal değişiklik zamanına sahiptir), buna saldırmanın doğru yolu değişiklik zamanıdır. Çıkarılan tüm dosyalar, bu dizinde en son değiştirilen mevcut dosyadan daha yeni bir değişiklik zaman damgasına sahiptir.
İşte basit bir durum.
Geçerli dizindeki mevcut dosyalardan hiçbirine en az 24 saat boyunca dokunulmadığını varsayalım. Son 24 saatte değiştirilen herhangi bir şey, bu nedenle zipfile'den önemsizdir.
$ find . -mtime -1 -print0 | xargs -0 rm
Bu da bazı dizinleri bulacak, fakat rm
onları yalnız bırakacak. İkinci geçişte ele alınabilir:
$ find . -mtime 1 -type d -print 0 | xargs -0 rmdir
Yakın zamanda değiştirilen dizinler zip tarafından değiştirildi. Eğer rmdir
bunları başarılı kaldırır, bu onların boş olduğu anlamına gelir. Zip tarafından dokunulan boş dizinler büyük olasılıkla yarattı: yani arşivden geldi. % 100 emin olamayız. Sıkıştırma işinin, bazı dosyaları boş olan varolan bir dizine koyması mümkündür.
Eğer find
ağaç dosyaları çok son değiştirilen çünkü 'ın 24 saat ayrıntı, bu iş için yeterince iyi değil, o zaman ben bir sonraki basit bir şey düşünün: unzip iş varolan alt dizinleri içine bir şey koymadı varsayalım. Başka bir deyişle, sıkıştırılmamış her şey en üst düzeydeki bir dosya veya daha önce orada olmayan yeni bir alt dizindir, bu nedenle zipten malzeme içeren hiçbir şey içermez. Sonra:
# list directory in descending order of modification time
$ ls -1t > filelist # descending order of modification time
Şimdi filelist
bir metin editöründe açtık ve listeden ilk gelenleri zip'den gelmedik. Bu girişi ve ondan sonraki her şeyi sileriz. Geriye kalan, zip'ten gelen dosya ve dizinlerdir. Öncelikle isimlerdeki boşluklar ve kaçılması gereken tekliflerin oluşumları gibi konuları görsel olarak inceliyoruz. Gerekirse her şeyin etrafına tırnak işaretleri ekleyebiliriz: Aşağıdakiler Vim kullandığınızı varsayar:
:%s/.*/"&"/
O zaman hepsine büyük bir çizgide katılın:
:%j
Şimdi rm -rf
önüne yerleştirin :
Irm - rf<ESC>
İmlecin altındaki satırı bir kabuk komutu olarak çalıştırın:
!!sh<Enter>
Kesinlikle, zaten var olan dosyaları silme ya da dosya adı sorunları nedeniyle batma riski nedeniyle bu görevin adımlarını otomatikleştiremem.
Zip içindeki yolların bir listesini alma yoluna gidecekseniz, daha sonra bir dosyaya kaydedin, çok dikkatli bir şekilde inceleyin ve gerekli düzenlemeleri yaptıktan sonra kaldırmaya dönüştürün.
lq
Seçeneklerinin farkındaunzizp
değildim, ana cevabının etrafına bazı klasik * nix numaraları ekledim.