Bir dizinde yüzlerce hatta binlerce dosya olduğunu düşünün. Bu dosyaların içerisinde sahte dosyalarda var. Sahte dosya derken şunu kastettim; ".jpg" uzantılı veya kendi uzantısında fakat gerçekten JPG resmi olmayan dosyalar. Bu dosyalar html, png, gif, doc, txt, mpeg, gibi JPG grafik dosyası hariç diğer tüm dosya türlerini kapsıyor.
Evet geçen gün başıma böyle bir şey geldi. İşte PHP nin yetersiz kaldığı yerlerden biri. O kadar uğraştım fakat PHP de güvenli bir şekilde bunu yapabilecek yöntem bulamadım. Kullanılabilecek function'lar var. shell_exec() kullanılarak halledilebilir fakat madem shell komutu çalıştıracam o zaman neden PHP kullanıyım ki ? Bu komutu PHP ile çalıştırmaktansa komut satırından çalıştırmak daha kolay.
Gelelim bash betiğimizin çalışmasına. Bash hakkında az/çok bilginiz varsa, koda göz atmanız, nasıl çalıştığı hakkında size fikir verecektir.
Aşağıdaki kodu "jpeg" dosya adıyla kayıt edin.
. . . . . . . . . .
#!/bin/bash
#
# Sahibi : http://irfandurmus.com
# Lisans : Creative Commons
# Kullanım : ./jpeg [dizin]
#
if [ -n "$1" ]
then
if [ -d "$1" ]
then
cd "$1"
else
echo 'Hata : $1 dizin değil'
echo 'Kullanımı : ./jpeg [dizin]'
exit
fi
fi
for dosya in *;
do
if [[ `file $dosya` != *JPEG* ]]; then
rm "$dosya";
echo "Silindi: $dosya"
fi
done
daha sonra
./jpeg resimlerim
komutunu verdiğinizde resimlerim klasörü içerisinde sadece gerçek jpeg dosyaları kalacak, diğer tüm dosyalar silinecektir. Hangi dosyaların silindiğini ekrana yazacaktır. Eğer "resimlerim" bir dizin değilse size bunu belirtecektir.
Not : Kodu, yedeği olmayan dosyalar üzerinde kullanmayın. Silinen dosyaların geri dönüşümü mümkün olmayabilir. Dosyalarınızın hepsinin tek dizin içerisinde, alt dizin olmadan bulunması gerekiyor. Kontroller eksik. İsterseniz geliştirebilirsiniz. Son olarak her zamanki gibi kullanımdan doğan zararlardan beni sorumlu tutmayın.