The find
perintah pada Linux memiliki banyak pilihan dibandingkan dengan find
perintah pada SunOS atau Solaris.
Saya ingin menggunakan find
perintah seperti ini:
find data/ -type f -name "temp*" -printf "%TY-%Tm-%Td %f\n" | sort -r
Ini berfungsi dengan baik pada mesin Linux, tetapi perintah yang sama tidak memiliki opsi -printf
pada mesin SunOS. Saya ingin menyesuaikan output saya dalam "%TY-%Tm-%Td %f\n"
format.
Harap sarankan alternatif untuk SunOS.
shell-script
find
solaris
Pratik Mayekar
sumber
sumber
find
pada Solaris, instal paket findutils .Jawaban:
Perhatikan bahwa tidak ada hubungannya dengan Linux; bahwa
-printf
predikat khusus untuk pelaksanaan GNU darifind
. Linux bukan OS, itu hanya kernel yang ditemukan di sejumlah OS. Sementara sebagian besar OS yang digunakan untuk menggunakan GNU userland di masa lalu, sekarang sebagian besar OS menggunakan Linux tertanam dan memiliki perintah dasar jika mereka memilikinya.find
Perintah GNU , yang mendahului Linux, dapat diinstal pada sebagian besar OS mirip Unix. Itu pasti digunakan pada Solaris (disebut SunOS saat itu) sebelum Linux keluar.Saat ini, bahkan tersedia sebagai paket Oracle untuk Solaris. Pada Solaris 11, itu dalam
file/gnu-findutils
, dan perintah itu dinamaigfind
(untuk GNUfind
, untuk membedakannya dari perintah sistem itu sendirifind
).Sekarang, jika Anda tidak dapat menginstal paket, kemungkinan terbaik Anda adalah menggunakan
perl
:Di sini, kami masih menggunakan
find
(implementasi Solaris) untuk menemukan file, tetapi kami menggunakan-exec
predikatnya untuk meneruskan daftar fileperl
. Danperl
melakukan alstat()
pada masing-masing untuk mengambil metadata file (termasuk waktu modifikasi sebagai elemen ke-10 ($s[9]
)), menafsirkannya dalam zona waktu lokal (localtime()
) dan memformatnya (strftime()
) yang kemudianprint
bersama dengan nama file ($_
adalah variabel loop jika tidak ada yang ditentukan dalamperl
, dan$!
setara denganstderror(errno)
, teks kesalahan untuk kegagalan panggilan sistem terakhir).sumber
ls
tipe keluaran, lihat Spesifikasi mode daftar di pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.htmlfind
's-printf
mendahului POSIX.2, sehingga orang-orang POSIX yang harus disalahkan di sini. Perhatikan juga bahwa spesifikasi POSIX belum dipublikasikan hingga tahun 2000-an. Saya masih menyalahkan orang-orang GNU untuk memperkenalkan merekastat
lebih dari satu dekade kemudian dengan sintaks yang berbeda dan lebih rendah untuk spesifikasi formatnya.Cara lain untuk mendekatinya adalah dengan
find2perl
skrip, yang mengubah (di sini, subset) dari sebuahfind
perintah ke skrip perl yang sesuai. Skrip perl menggunakanFile::Find
modul untuk melakukan pengangkatan berat. Karena skrip find2perl di sistem saya tidak mendukung-printf
predikat, saya menambahkannya secara manual:Pada dua file sampel yang saya buat, hasilnya sama:
sumber