Ç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 findexec -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 findexec -rm? Ksh kullanıyorum.
Yanıtlar:
Kullanım findhala 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 -fiş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 -newerBtyerine -newermtdosyanı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 {} \;
findkullanmalısınız . -daystart-mtime