Çok sayıda dosya içeren bir dizine sahibim (yılın her günü için günlükler gibi). Diyelim ki 22/11 diyelim önce oluşturulan tüm dosyaları kaldırmak istiyorum. Bunu nasıl başarabilirim? Sonra kullanmalı mıyım find
exec -rm
? Ksh kullanıyorum.
Çok sayıda dosya içeren bir dizine sahibim (yılın her günü için günlükler gibi). Diyelim ki 22/11 diyelim önce oluşturulan tüm dosyaları kaldırmak istiyorum. Bunu nasıl başarabilirim? Sonra kullanmalı mıyım find
exec -rm
? Ksh kullanıyorum.
Yanıtlar:
Kullanım find
hala dosyaları silmenin tercih edilen yoludur. Daha fazla bilgi için http://mywiki.wooledge.org/UsingFind adresine bakın .
Bunu yapmanın bir yolu içinde zaman damgalı bir dosya oluşturmaktır. Örneğin
touch -t 201311220000 /tmp/timestamp
Şimdi find
, zaman damgasıyla eşleşen örneğin geçerli dizinde olduğu varsayılarak GNU dosyalarını silin :
find . -type f ! -newer /tmp/timestamp -delete
veya GNU olmayanlar bulmak
find . -type f ! -newer /tmp/timestamp -exec rm {} \;
type -f
işlemi yalnızca dosyalara sınırlar.
GNU veya bazı BSD'ler ile find
:
find . ! -newermt 2013-11-22 ! -type d -delete
Dosyaların son değişiklik zamanını kontrol ettiğini unutmayın. Bazı BSD, kullanmak olabilir -newerBt
yerine -newermt
dosyanın düğüm kontrol etmek doğum yerine varsa zaman.
find /path/to/directory/ -mtime +<number of days> -name '<file name>' -exec rm -rf {} \;
örnek:
find /Netap_fileshare_backup/SQL/DB_backups/xeo/ -mtime +15 -name 'ORA_XEO*' -exec rm -rf {} \;
Bu durumda, "ORA_XEO" ile başlayan ve 15 günden fazla olan tüm dosyaları kaldıracaktır.
rm -rf
İlk komut, daha iyi izlese de , ilk komut bu 15 günden daha eski olan herhangi bir dizinde bulunan her şeyi kaldıracaktı. (Ayrıca, neden parantez çevresinde -name
?)
example.jar
- kaldırılacak example.cp
- kaldırılacak example.tar
- kaldırılmayacak
find /path/to/directory/ -mtime +<number of days> \( -name '*.jar' -o -name '*.cp' \) -name 'ex*' -exec rm -rf {} \;
find
kullanmalısınız . -daystart
-mtime