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 name
ve 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; ...
-exec
yö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, rm
bir dosya bulunduğunda her seferinde yalnızca bir kez çalıştırılacak ve bu komut neredeyse -delete
modern olarak kullanılan seçeneği kullanmak kadar hızlı olacaktır find
:
find /path/to/ -type f -mtime +7 -name '*.gz' -delete
-delete
sonunda 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 1
alt 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 -31
ve 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 {} \;
name
Ve arasında bir boşluk olmalı'*.gz'
.