Belirli bir dosyadan daha eski dosyaları silme


14

Bir klasörden belirli bir dosyadan daha eski olan tüm dosyaları silmem gerekiyor.
CentOS 7'de bash çalışıyor.

Bunun için bir çözümüm var, ama bence daha zarif bir yol olmalı:

reference_file=/my/reference/file

get_modify_time()
{
    stat $1 | grep -Po "Modify: \K[0-9- :]*"
}

pit=$(get_modify_time $reference_file)
for f in /folder/0000* ; do [[ "$pit" > "$(get_modify_time $f)" ]] && rm $f ; done

Yanıtlar:


28

Ben denemedim, ama findtüm operasyon gayet iyi idare edebilmelidir:

$ find dir/ -type f ! -newer reference -delete

... ya da ...

$ find dir/ -type f ! -newer reference ! -name reference -delete

Temelde:

  • ! -newer reference, daha önce değiştirilen dosyalarla eşleşir reference.
  • -delete onları siler.
  • ! -name referencereferencealtında da yer dir/alması ve onu tutmak istemeniz durumunda hariçtir .

Bu işlem, daha eski referenceve altında bulunan tüm dosyaları silmelidir dir/.


2
Mükemmel :). -maxdepth 1Aramayı özyinelemeli tutmak için eklendi
CSY

3
! -newer"daha yeni değil", yani "daha yaşlı veya aynı yaş " anlamına gelir ; dosyanın kendisi yolda findgörünüyorsa, sadece akılda tutulması gereken bir şeyle eşleşir .
ferada

1
@ferada Hariç tutmazsanız olmaz, bu yüzden cevabım da içerir ! -name reference(bkz. üçüncü madde işareti).
John WH Smith

7

(daha yeni) ve (daha eski) operatörleri testkullanarak dosya değiştirme zamanlarını karşılaştırın :-nt-ot

if [ "$file1" -ot "$file2" ]; then
    #do whatever you want;
fi

2
Teşekkürler, bu benim
çözümümden
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.