Listede 18.000 dosyam olduğu için daha güvenli ve çok daha hızlı bir yaklaşıma gittim! Büyük bir Drupal kurulumunda görüntüleri temizlemem gerekiyordu.
Listede olmayan tüm dosyaları silmek, yalnızca listede bulunan dosyaları tutmakla aynıdır. Bu yüzden dosyaları listeden başka bir yere kopyalamaya karar verdim, ancak 20 GB'lık dosyaları kopyalamak çok fazla yer kaplayacak ve çok yavaş olacaktır. Bu yüzden hile dosyaları hardlinks
yerine -l
seçeneğini kopyalamaktır cp
. Bu neredeyse hiç yer kaplamaz ve çok hızlıdır. Ayrıca, dizin yapısını korumak gerektiğinden, --parents
seçeneği kullandım .
İşte dosya listemden bir alıntı:
1px.png
misc/feed.png
modules/file/icons/x-office-presentation.png
modules/file/icons/x-office-spreadsheet.png
newsletter.png
sites/all/libraries/ckeditor/plugins/smiley/images/devil_smile.png
sites/all/libraries/ckeditor/plugins/smiley/images/regular_smile.png
sites/default/files/009313_PwC_banner_CBS_Observer_180x246px.jpg
Örnek bir hedef, temp hedef olacaktı:
cp -l --parents 'misc/feed.png' temp
Bu şu yapıyı yaratacaktır:
temp
misc
feed.png
Sabit bağlantıların çalışması için hedefin kaynakla aynı dosya sisteminde olması gerektiğini unutmayın.
Bir sonraki adım betiği oluşturmaktır:
sed -e "s,^,cp -l --parents '," -e "s,$,' /some/where/temp," filelist > newfilelist
Şimdi, zaten boş dir / some / where / temp dosyasını oluşturduğunuzu varsayarak, dosyaları şu şekilde kopyalayabilirsiniz:
sh newfilelist 2> missing_files
Hataların nasıl ortaya çıktığını not edin missing_files
. Bu yaklaşımın ek bonusu, orijinal listeden aslında var olmayan dosyaların bir listesini almanızdır!
Komut dosyasını çalıştırdıktan sonra, temp yalnızca dosya listesindeki dosyaları içerir, ancak hiçbir şey silmeden ve ek yer kaplamadan. Sonuçtan memnunsanız, alt klasörler dahil tüm orijinal dosyaları silebilirsiniz.
Son olarak, dosya ve klasörleri geçici olarak orijinal konumuna geri taşıyın.
18.000 dosya için sadece birkaç saniye sürdü.