Kombinasyonu findve lsiçin iyi çalışır
- yeni satır içermeyen dosya adları
- çok fazla dosya değil
- çok uzun dosya adları değil
Çözüm:
find . -name "my-pattern" -print0 |
xargs -r -0 ls -1 -t |
head -1
Hadi yıkalım:
İle findbunun gibi tüm ilginç dosyaları eşleştirebiliriz:
find . -name "my-pattern" ...
sonra kullanarak -print0tüm dosya adlarını güvenli bir şekilde şu şekilde aktarabiliriz ls:
find . -name "my-pattern" -print0 | xargs -r -0 ls -1 -t
findburaya ek arama parametreleri ve kalıpları eklenebilir
find . -name "my-pattern" ... -print0 | xargs -r -0 ls -1 -t
ls -tdosyaları değiştirme zamanına (en yenisi) göre sıralar ve bir satıra bir tane basar. -cOluşturma zamanına göre sıralamak için kullanabilirsiniz . Not : bu, yeni satırlar içeren dosya adlarıyla kesilir.
Sonunda head -1bize sıralanmış listedeki ilk dosyayı alır.
Not: xargs bağımsız değişken listesinin boyutuyla ilgili sistem sınırlarını kullanın. Bu boyut aşarsa, xargsarayacak lsbirden çok kez. Bu sıralama ve muhtemelen nihai çıktıyı kıracaktır. Çalıştırmak
xargs --show-limits
sisteminizdeki sınırları kontrol etmek için.
Not 2: kullanım find . -maxdepth 1 -name "my-pattern" -print0alt klasörlere üzerinden dosya aramak istemiyorsanız.
Not 3: @starfry tarafından işaret edildiği gibi - için -rargüman xargsçağrılmasını engelliyorsa, ls -1 -tile eşleşen dosya yoksa find. Öneri için teşekkürler.