7 günden daha eski olan tüm dosyaları silmek için aşağıdaki komutu yazıyorum, ancak işe yaramıyor:
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
Bu dosyaları nasıl kaldırabilirim?
7 günden daha eski olan tüm dosyaları silmek için aşağıdaki komutu yazıyorum, ancak işe yaramıyor:
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
Bu dosyaları nasıl kaldırabilirim?
Yanıtlar:
@Jos'un belirttiği gibi nameve arasında bir boşluk özledin '*.gz'; Ayrıca komut kullanımı hızlandırmak için -type füzerine komutunu çalıştırarak seçeneği f yalnızca iles.
Yani sabit komut şöyle olurdu:
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;
find: Bulmak için Unix komutu f iles / d irectories / l mürekkepleri vb/path/to/: aramanızı başlatacağınız dizin.-type f: sadece dosyaları bul.-name '*.gz': biten dosyaları listeler .gz.-mtime +7: sadece değişiklik süresi 7 günden eski olanları düşünün.-execdir ... \;: bulunan her sonuç için, aşağıdaki komutu yapın ....rm -- '{}': dosyayı kaldırın; Bu {}kısım, bulgunun sonucunun bir önceki kısımdan ikame edildiği yerdir. --komut parametrelerinin sona ermesi, kısa çizgi ile başlayan dosyalar için hata istemekten kaçınır anlamına gelir .find /path/to/ -type f -mtime +7 -name '*.gz' -print0 | xargs -r0 rm --
Gönderen adam find :
-print0
True; print the full file name on the standard output, followed by a null character
(instead of the newline character that -print uses). This allows file names that contain
newlines or other types of white space to be correctly interpreted by programs that process
the find output. This option corresponds to the -0 option of xargs.
Bu biraz daha verimli, çünkü:
rm file1 file2 file3 ...
aksine:
rm file1; rm file2; rm file3; ...
-execyöntemde olduğu gibi .
Alternatif ve daha hızlı bir komut yerine exec'in +sonlandırıcısını kullanıyor\; :
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' +
Bu komut, rmbir dosya bulunduğunda her seferinde yalnızca bir kez çalıştırılacak ve bu komut neredeyse -deletemodern olarak kullanılan seçeneği kullanmak kadar hızlı olacaktır find:
find /path/to/ -type f -mtime +7 -name '*.gz' -delete
-deletesonunda direkt olarak gidemiyorum ? Neden +veya ile karışıklık \;?
Bulma ile dosyaları kaldırırken dikkatli olun. Ne kaldırdığınızı kontrol etmek için komutu -ls ile çalıştırın
find /media/bkfolder/ -mtime +7 -name '*.gz' -ls
. Ardından komutu tarihçeden kaldırın ve ekleyin.-exec rm {} \;
Bir bulma komutunun yapabileceği hasarı sınırlayın. Dosyaları tek bir dizinden kaldırmak istiyorsanız, -maxdepth 1alt dizinlerde dolaşmanın veya yazım hatası yaparsanız tüm sistemin aranmasının engellenmesini önler /media/bkfolder /.
Eklediğim diğer sınırlar -name 'wncw*.gz', zamandan daha yeni bir süre eklemek -mtime -31ve aranan dizinleri alıntılamak gibi daha belirli ad argümanlarıdır . Bunlar, temizlik işlemlerini otomatikleştiriyorsanız özellikle önemlidir.
find "/media/bkfolder/" -maxdepth 1 -type f -mtime +7 -mtime -31 -name 'wncw*.gz' -ls -exec rm {} \;
nameVe arasında bir boşluk olmalı'*.gz'.