7 günden daha eski dosyaları kaldırma


79

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?


5
nameVe arasında bir boşluk olmalı '*.gz'.
Jos

Yanıtlar:


136

@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 -- '{}' \;

Açıklama:

  • 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 .

Alternatif olarak, kullanın:

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

3
Neden -deletesonunda direkt olarak gidemiyorum ? Neden +veya ile karışıklık \;?
rain01


2

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 {} \;

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.