Bagaimana saya bisa mendapatkan daftar semua file di bawah direktori saat ini bersama dengan tanggal modifikasinya dan diurutkan berdasarkan tanggal itu?
Sekarang saya tahu bagaimana mencapainya find
, stat
dan sort
, tetapi untuk beberapa alasan aneh stat
itu tidak diinstal pada kotak dan tidak mungkin saya bisa menginstalnya.
Ada pilihan lain?
PS: gcc
tidak diinstal juga
find
-printf
tindakan tampaknya meskipun termudah.Jawaban:
Metode terpendek saya menggunakan zsh:
(tambahkan
D
kualifikasi glob jika Anda juga ingin membuat daftar file tersembunyi atau file dalam direktori tersembunyi).Jika Anda menemukan GNU, buatlah untuk mencetak waktu modifikasi file dan urutkan berdasarkan itu. Saya berasumsi tidak ada baris baru dalam nama file.
Jika Anda memiliki Perl (sekali lagi, dengan asumsi tidak ada baris baru dalam nama file):
Jika Anda memiliki Python (sekali lagi, dengan asumsi tidak ada baris baru dalam nama file):
Jika Anda memiliki akses SSH ke server itu, pasang direktori di atas sshfs pada mesin yang lebih baik:
Dengan hanya alat POSIX, ini jauh lebih rumit, karena tidak ada cara yang baik untuk menemukan waktu modifikasi file. Satu-satunya cara standar untuk mengambil waktu file adalah
ls
, dan format output tergantung lokal dan sulit untuk diurai.Jika Anda dapat menulis ke file, dan Anda hanya peduli pada file biasa, dan tidak ada baris baru dalam nama file, inilah kludge yang mengerikan: buat tautan keras ke semua file dalam satu direktori, dan urutkan berdasarkan waktu modifikasi.
sumber
find . -print | xargs -n99999 -s999999 ls -ltr
. Tetapi itu memiliki masalah yang (1)xargs
mungkin tidak memungkinkan-m
lebih dari 512 atau-s
lebih besar dari 5120, dan (b) bahkan jika Anda dapat mengatasinya, masih ada ukuran maksimum yang dipaksakan oleh kernel dari daftar argumen dan lingkungan gabungan. Sebagian besar ide Anda (kecuali yang Perl dan Python) memiliki masalah yang sama, itulah sebabnya saya secara khusus menghindari membangun garis perintah yang panjang.zsh
gumpalan rekursif dalam kasus umum.print -rl **/*
. Satu-satunya batasan adalah berapa banyak memori bebas yang Anda miliki), dan di luar itu adazargs
. Proposal Andafind … | xargs … ls
akan disortir dengan benar jika hanyaxargs
memohonls
sekali saja, dan tidak akan berfungsi jika ada karakter khusus dalam nama file.Dengan asumsi GNU
find
:Ubah
1n,1
ke1nr,1
jika Anda ingin file terdaftar paling baru terlebih dahulu.Jika Anda tidak memiliki GNU,
find
itu menjadi lebih sulit karenals
format stempel waktu sangat bervariasi (misalnya, file yang dimodifikasi memiliki stempel waktu yang berbeda, misalnya).sumber
ls --time-style="..."
- Saya tidak yakin apakah ini standar atau GNU, sepertinya GNU.ls
tidak memiliki opsi itu.Pada mac tidak ada argumen-printf untuk ditemukan, tetapi Anda dapat melakukan ini sebagai gantinya:
find . -print0 | xargs -0 -n 100 stat -f"%m %Sm %N" | sort -n|awk '{$1="";print}'
sumber
seseorang dapat mencoba ini (kita harus membangunnya sendiri) https://github.com/shadkam/recentmost
sumber
Mengabaikan file tersembunyi - dengan cap waktu yang bagus & cepat
Menangani spasi dalam nama file dengan baik - bukan berarti Anda harus menggunakannya!
Lebih
find
berlimpah dapat ditemukan dengan mengikuti link.sumber
Berbicara secara umum tentang menemukan file berdasarkan tanggal (ini tidak akan berfungsi untuk poster asli, tapi saya berakhir di sini jadi saya pikir orang lain mungkin juga). Dalam kasus penggunaan saya, saya ingin membuat daftar file dengan tujuan meninjau mereka sebelum dihapus.
Dengan findutils 4.6.0 Saya suka:
Perintah di atas menemukan file (
-type f
), dalam direktori kerja saat ini (.
) yang telah dimodifikasi lebih dari 270 hari yang lalu (-mtime +270
Juga-mtime 0
akan menghasilkan 24 jam terakhir, dan-mtime -5
menunjukkan 5 hari terakhir). Kemudian digunakanls
untuk mendaftar mereka berdasarkan tanggal, terbaru terlebih dahulu (-exec ls -laFGht --time-style=iso {} \+
)Berikut contoh hasilnya:
Hal yang hebat tentang ini adalah bahwa setelah daftar telah ditinjau, itu adalah masalah sederhana untuk mengganti bagian daftar dengan
find
perintah delete:sumber