Yanıtlar:
Oluşturulan en eski dosya yerine en eski değiştirilen dosyayı silmekte sorun yok gibi görünüyor;
Bunu, newlines içeren dosya adlarına bölmeyeceğinden en güvenli yöntem olarak kabul ediyorum:
stat --printf='%Y %n\0' * | sort -z | sed -zn '1s/[^ ]\{1,\} //p' | xargs -0 rm
stat --printf='%Y %n\0' *
: geçerli çalışma dizinindeki her bir dosya için dosyanın yolunu takip eden son değişiklik zamanının NUL ayrılmış bir listesini yazdırır;sort -z
: satır ayırıcı olarak NUL kullanarak listeyi sıralar;sed -zn '1s/[^ ]\{1,\} //p'
: ilk NUL sonlandırılmış satırdan boşluk bırakarak boşluk bırakmayan bir veya daha fazla karakter içeren bir dizgenin ilk oluşumunu kaldırır ve yazdırır;xargs -0 rm
: NUL ile sonlandırılan satırı rm
argüman olarak iletir;% touch file1
% touch file2
% stat -c '%Y %n' *
1447318965 file1
1447318966 file2
% stat --printf='%Y %n\0' * | sort -z | sed -zn '1s/[^ ]\{1,\} //p' | xargs -0 rm
% ls
file2
En eski dosyayı "Erişim Süresi" veya "Değiştirme Zamanı" na göre belirlemek için?
İkinciyse, aşağıdaki komutu kullanmanız yeterlidir:
rm ls -l --sort=time | sed -n 2p | awk '{print $NF}'
ls
gibi, yaratma zamanı çekirdek tarafından desteklenmediği için çıktısı atime veya mtime olarak sıralanabilir (ve bu arada son sorulan dosyayı kaldırma yöntemi, sorunun istediği şeydir); fakat bu çoğunlukla kırılabilir 1) Çıktısında bir satırsonu içeren bir dosyada ls
. Asla ayrıştırmals
. Kullanın find
. 2) Boşluk veya tablo içeren bir dosyada, çünkü awk '{print $NF}'
yalnızca boşluk / sekmeyle ayrılmış son sözcüğü yazdırır.
ls -1t | tail -n +11 | xargs rm -f