GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa menemukan file terlama di pohon direktori

Ini berfungsi (diperbarui untuk memasukkan saran Daniel Andersson):

find -type f -printf '%T+ %p\n' | sort | head -n 1

Yang ini sedikit lebih portabel dan karena tidak bergantung pada find GNU ekstensi -printf , jadi ini juga berfungsi di BSD / OS X:

find . -type f -print0 | xargs -0 ls -ltr | head -n 1

Satu-satunya downside di sini adalah agak terbatas pada ukuran ARG_MAX (yang harus tidak relevan untuk sebagian besar kernel baru). Jadi, jika ada lebih dari getconf ARG_MAX karakter dikembalikan (262.144 di sistem saya), itu tidak memberi Anda hasil yang benar. Itu juga tidak sesuai dengan POSIX karena -print0 dan xargs -0 tidak.

Beberapa solusi lain untuk masalah ini diuraikan di sini:Bagaimana cara menemukan file terbaru (terbaru, terlama, terlama) di direktori? – Wiki Greg


Perintah perintah berikut dijamin untuk bekerja dengan segala jenis nama file yang aneh:

find -type f -printf "%T+ %p\0" | sort -z | grep -zom 1 ".*" | cat

find -type f -printf "%[email protected] %T+ %p\0" | \
    sort -nz | grep -zom 1 ".*" | sed 's/[^ ]* //'

stat -c "%y %n" "$(find -type f -printf "%[email protected] %p\0" | \
    sort -nz | grep -zom 1 ".*" | sed 's/[^ ]* //')"

Menggunakan byte null (\0 ) alih-alih karakter umpan baris (\n ) memastikan keluaran find masih dapat dimengerti jika salah satu nama file berisi karakter linefeed.

-z switch membuat sort dan grep hanya menginterpretasikan null byte sebagai karakter end-of-line. Karena tidak ada saklar untuk kepala, kami menggunakan grep -m 1 sebagai gantinya (hanya satu kemunculan).

Perintah diurutkan berdasarkan waktu eksekusi (diukur pada mesin saya).

  • Perintah pertama akan menjadi yang paling lambat karena harus mengubah waktu setiap file menjadi format yang dapat dibaca manusia terlebih dahulu dan kemudian mengurutkan string tersebut. Perpipaan ke kucing menghindari pewarnaan output.

  • Perintah kedua sedikit lebih cepat. Saat masih melakukan konversi tanggal, menyortir secara numerik (sort -n ) detik berlalu sejak era Unix sedikit lebih cepat. sed menghapus detik sejak era Unix.

  • Perintah terakhir tidak melakukan konversi sama sekali dan harus jauh lebih cepat daripada dua yang pertama. Perintah find itu sendiri tidak akan menampilkan mtime dari file terlama, jadi diperlukan stat.

Halaman manual terkait:temukan – grep – sed – sort – stat


Linux
  1. Bagaimana saya bisa membuat file di setiap folder?

  2. Bagaimana saya bisa menyalin file secara rekursif dengan ekstensi file, mempertahankan struktur direktori?

  3. Bagaimana saya bisa mengedit semua file yang dikembalikan oleh find in vi di Linux?

  1. Bagaimana menemukan pengelola file default?

  2. Bagaimana cara menyalin pohon direktori tetapi bukan file di Linux?

  3. Tidak dapat menemukan .so di direktori yang sama dengan executable?

  1. Cara Menemukan File Terlama Di Pohon Direktori Di Linux

  2. Bagaimana cara menemukan versi Fedora yang saya gunakan?

  3. Bagaimana saya bisa menemukan semua ekstensi file yang berbeda dalam hierarki folder?