Kombinasyonu find
ve ls
iç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 find
bunun gibi tüm ilginç dosyaları eşleştirebiliriz:
find . -name "my-pattern" ...
sonra kullanarak -print0
tüm dosya adlarını güvenli bir şekilde şu şekilde aktarabiliriz ls
:
find . -name "my-pattern" -print0 | xargs -r -0 ls -1 -t
find
buraya ek arama parametreleri ve kalıpları eklenebilir
find . -name "my-pattern" ... -print0 | xargs -r -0 ls -1 -t
ls -t
dosyaları değiştirme zamanına (en yenisi) göre sıralar ve bir satıra bir tane basar. -c
Oluşturma zamanına göre sıralamak için kullanabilirsiniz . Not : bu, yeni satırlar içeren dosya adlarıyla kesilir.
Sonunda head -1
bize 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, xargs
arayacak ls
birden ç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" -print0
alt klasörlere üzerinden dosya aramak istemiyorsanız.
Not 3: @starfry tarafından işaret edildiği gibi - için -r
argüman xargs
çağrılmasını engelliyorsa, ls -1 -t
ile eşleşen dosya yoksa find
. Öneri için teşekkürler.