Herhangi bir css stil sayfasından veya herhangi bir düğümden bağlı olmayan artık dosyalar ve resimler nasıl bulunur?


21

Genel dosya sistemi içinde ve bir tema dizininde bulunan ve kullanılmayan tüm dosyaları listelemek ve bunları listelemek, hatta belki de otomatik olarak silmek için bir seçeneğiniz var mı?

Şu anda herhangi bir css stil sayfasından veya herhangi bir düğümden bağlı olmayan dosyaları kastediyorum.


Bunun cevabını da bilmek istiyorum, soruyu gönderdiğiniz için teşekkür ederiz!
NPC

Alanla yüklenen dosyalara (ImageField gibi) veya genel olarak (IMCE yoluyla yüklenen) mi bahsediyorsunuz? Her düğüm gövdesinde referansları aramadan IMCE yüklemelerini izleyebileceğinizi sanmıyorum.
Chaulky

Evet, IMCE ile gönderiyorum. Söylediğin şeyi yapan bir modül olduğunu umuyordum: görüntü referanslarını bulmak için düğümleri tara, sonra drupal iç referansları (etki alanı olmadan) ilgili dizinleri tara ve kullanılmayan dosyaları bulmak için karşılaştır. Muhtemelen benzer bir şey, kopuk bağlantıları bulmak için mevcut bir modüldeki linklerle yapılır. Bu yüzden belki benzer modül görüntüler için var olduğunu düşündüm ama belki değil ..
camcam

Yanıtlar:


14

Artık MySQL sorgusunu çalıştırarak artık dosyaları bulabilirsiniz:

SELECT fm.*
FROM file_managed AS fm
LEFT OUTER JOIN file_usage AS fu ON (fm.fid = fu.fid)
LEFT OUTER JOIN node AS n ON (fu.id = n.nid)
WHERE fu.type = 'node' AND n.nid IS NULL

Bu, ilişkili düğüme sahip olmayan tüm dosyaları döndürür. Döndürülen satırları ve dosyaları silmenin güvenli olup olmadığından emin değilim, muhtemelen modül kurulumunuza da bağlıdır. Sadece kendi sorumluluğunuzdadır kullanın!

Kaynak: http://drupal.org/node/733258#comment-5582764


5
Gönderinizi KOPYALANAN ORİJİNAL gönderinin bağlantısını ....... drupal.org/node/733258#comment-5582764 adresinden paylaşabilirsiniz . Kaynağı göstermemek çok etik değil.
Sk8erPeter

Yukarıda gönderdiğiniz bağlantıyı izleyerek , drupal.org/node/733258#comment-7427898 içindeki kodun yararlı olduğunu düşünüyorum çünkü hem artık dosyaları hem de veritabanındaki ilgili girişlerini kaldıracak.
Marcos Buarque 24:13

Aslında, @ Sk8erPeter, cevaplardaki bilgiyi toplamak ve sonra buna bağlantı vermek uygun. Özellikle de Stack Exchange dışındaki bir kaynaktan geliyorlarsa.
Christia

1
@Christia, orijinal yazıyı düzenlemeden önce okursanız (bağlantıya cevabı koyarım), David'in kaynağını bile söylemeden ve yazıya bir teklif işareti koymadan bile başkasının yorum sözcüğünü kelimeyle kopyaladığını görebilirsiniz. Bu intihal olarak düşünülebilir, yorumumun konusu bu. :)
Sk8erPeter

Bunu önlemek için birkaç yinelenen dosya kimliği ürettiğini göreceksiniz, bundan kaçınmak ve grup olarak eklediğim yinelenenlerin sayısını eklemek. Fm. *, COUNT (*) dosya_Yönetiminden AS fm LEFT OUTER JOIN'İ SEÇİN file_usage AS fu ON (fm.fid = fu.fid) LEFT OUTER JOIN düğümü AS n ON (fu.id = n.nid) NEREDE 'node' AND n.nid fm.fid NULL GROUP BY;
Cameron,

5

Üç yıl sonra bu gönderiye gelenler için, bunu Fancy File Delete ( Fantezi Dosya Silme) olarak adlandırmak için kullanabileceğiniz küçük bir modül var .

Bu gönderi sırasında, beta sürümünde olduğundan, riski kendi sorumluluğunuzda kullanın. Her zamanki gibi, artıkları DB sorguları ile temizlemek kabataslak olabilir ve başarısı büyük ölçüde sizin özel modül kurulumunuza bağlıdır.


Bu modülü çok sıkıcı buldum - işe yaramaz olduğu noktaya. YMMV.
Felix Eve

3

" Artık düğümlere veya dosyalara ve dosya yönetilen tabloda bulunmayan dizine bağlı olmayan dosyaları " tanımlamaya yardımcı olabilecek bir şey (" Kullanılmayan dosyaları silme nasıl yapılır? " Konulu yinelenen soruda olduğu gibi ), Dosya denetleyicisi modülü. Bununla ilgili bazı detaylar, proje sayfasından:

Mükemmel bir Drupal dünyasında, sunucu dosya sisteminiz ve Drupal'ın dosya tablosundaki benzer girişleri% 100 senkronizedir. Fakat dosya sisteminizin bazı kısımları bazı disk arızası nedeniyle bozulmuşsa ne olur? Veya modüllerden biri veritabanınızı ve dosyalarınızı karıştırdı? Ya da konuşlandırma komut dosyası beslendi? Öyleyse bu modül, hangi dosyaların senkronize edilmediğini izlemenize ve bulmanıza yardımcı olur.

Kutudan dosyalar tablosunda iki tür durum vardır: Geçici (0) ve Kalıcı (1). Dosya denetleyicisi ek bir durum Eksik (2) tanıtır. Çeşitli şekillerde tetiklenebilen doğrulama işlemi kapsamında, dosyalar tablosunun durum sütunu güncellenir.

Özellikler

  • Doğrulama işlemini yürütün: talep üzerine, cron üzerinden, sarhoş olmak (planlamada)
  • Filtreli dosya listesine genel bakış sayfası
  • Görüntüleme entegrasyonu
  • Dosya kontrolü için Drush komutu

Bir görünümün sonuçlarını dışa aktarmak istiyorsanız, views_data_export modülünü kullanmanız önerilir.

Öyleyse yapabileceğin şey şu şekilde:

  • Sitenizi bazı dev ortamlara klonlayın (kopyalayın), ancak kontrol etmek istediğiniz dizindeki dosyaların hiçbirini kopyalamayın. Bir varyasyon olarak (eğer bu soru üretim dışı bir durum sitesiyle ilgiliyse), geçici olarak tüm dosyaları bu dizinden çıkartın.
  • Kullanım Dosya Denetleyicisi dosyaları "kayıp" lar ne olduğunu öğrenmek için modül: Bu besbelli olan dosyalardır değil kullanılmamış. Ama bu modül hakkında tartışmayan herhangi bir dosya ... kullanılmamış!
  • Tüm eksik dosyaları kontrol etmek istediğiniz dizinin doğru yerine kopyalayarak, adım adım dizininizin mükemmel bir içeriğini yeniden oluşturabilirsiniz.

Not : Bu soru D7 ile ilgili olsa da, D8 için de bir (alfa) sürümüdür.



2

İstenmeyen dosyaları temizleyen tek bir modül var .

Yönetilen tüm dosyaları VBO özel eylemleriyle silmeye zorlama seçeneği olan yönetilen dosyaların görüntülenmesi Yönetilen dosyaları FID ile manuel olarak silme (ve gerçekten isterseniz silme işlemini zorlama seçeneği). Kullanılmayan dosyaları, dosya yönetilen tabloda bulunmayan varsayılan dosyalar dizininden silmek. AKA tüm yönetilmeyen dosyaları siliyor. Kullanılmayan dosyaları, artık düğümlere ve dosya kullanım tablosuna bağlı olmayan tüm kurulumdan silme. AKA artık tüm dosyaları siliyor.


1
Büyük kitlesel işlemler ve vbo modülü ile ilgili kötü bir deneyimim var. Başlangıçta Pierre.Vriens tarafından önerildiği gibi bir yaklaşım kullanacağım, sonra tavsiye modülünüzü kullanarak dosyaları temizleyeceğim.
kb8

0

Kullanılmayan dosyayı

  1. File_managed tablosundan elle gibi bir sorgu ile silin

    $this->database ->delete('file_managed') ->condition('fid', $fid, '=') ->execute();

  2. Bir dosyanın durumunu 0 olarak işaretlemek için geçici dosya olarak ayarlayınız, böylece cron belli bir süre sonra dosyayı silecektir.
    $file = File::load ($fid); $file->setTemporary();


0

Fantezi dosya silme modül benim için hiç işe yaramadı. İşte daha manuel bir alternatif.

Yönetilen dosya tablosunda olmayan bir klasörden dosyaları silmek için şunları yapabilirsiniz:

1) Tüm yönetilen dosyaların bir listesini oluşturun:

mysql whateverdb -e "select filename from file_managed" > ~/managed-files.txt

2) Bu listede olmayan bir dizindeki tüm dosyaları silin. Bunu yapmak için küçük bir bash betiği kullandım:

#!/bin/bash

IMG_FOLDER='/var/www/html/yoursite/docroot/sites/default/files/certain-images'
EXCLUDES='/home/yourhomeuser/managed-files.txt'

for FILE in $IMG_FOLDER/*; do
  if ! grep "$FILE" "$EXCLUDES"; then
        echo "Deleting $FILE"
        rm -f "$FILE"
  fi
done

Yalnızca IMG_FOLDERdeğişkeni, dosyaları silmek istediğiniz klasörün yoluyla değiştirin (ve yolu dışlayanlar dosyanızla güncelleyin)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.