Dalam urutan apa tanggal dipesan oleh? Tentu bukan urutan alfanumerik.
ls -ltmengurutkan berdasarkan waktu modifikasi. Tapi saya butuh waktu pembuatan.
Dalam urutan apa tanggal dipesan oleh? Tentu bukan urutan alfanumerik.
ls -ltmengurutkan berdasarkan waktu modifikasi. Tapi saya butuh waktu pembuatan.
Jawaban:
Sebagian besar unices tidak memiliki konsep waktu pembuatan file. Anda tidak dapat lsmencetaknya karena informasinya tidak direkam. Jika Anda memerlukan waktu pembuatan, gunakan sistem kontrol versi : tentukan waktu pembuatan sebagai waktu check-in.
Jika varian unix Anda memiliki waktu pembuatan, lihat dokumentasinya. Misalnya, pada Mac OS X (satu-satunya contoh yang saya tahu¹), gunakan ls -tU. Windows juga menyimpan waktu pembuatan, tetapi itu tidak selalu terkena port utilitas unix, misalnya Cygwin lstidak memiliki opsi untuk menunjukkannya. The statutilitas dapat menunjukkan waktu penciptaan, yang disebut “waktu lahir” di utilitas GNU, jadi di bawah Cygwin Anda dapat menampilkan file diurutkan berdasarkan waktu kelahiran dengan stat -c '%W %n' * | sort -k1n.
Perhatikan bahwa ctime ( ls -lc) bukan waktu pembuatan file , ini adalah waktu perubahan inode . Waktu perubahan inode diperbarui setiap kali ada sesuatu tentang perubahan file (konten atau metadata) kecuali bahwa waktu tidak diperbarui ketika file hanya dibaca (bahkan jika atime diperbarui). Secara khusus, waktu selalu lebih baru daripada waktu (waktu modifikasi konten file) kecuali waktu telah secara eksplisit diatur ke tanggal di masa depan.
-Umengurutkan berdasarkan waktu pembuatan. Di bawah Solaris 10.x: /usr/bin/lstidak mendukung -U, /usr/ucb/lsmendukung , -Udan mengurutkan berdasarkan waktu pembuatan. Hasil ini jelas tergantung pada sistem file yang menyimpan info itu di tempat pertama.
Sayangnya, stat(2)API tidak menyediakan cara untuk mendapatkan waktu pembuatan file, karena tidak diperlukan oleh standar Unix.
Namun, beberapa sistem file, seperti ext4, menyimpan informasi ini dalam metadatas file. Tidak ada cara standar untuk mendapatkannya, tetapi ada cara ( exthanya sistem file):
debugfs -R 'stat partition/relative/path/to/file' /dev/sda1
Anda akan mendapatkan sesuatu yang menyebutkan crtime( tidak ctime !) Jika Anda gunakan ext4.
ctime: 0x513a50e5:d4e448f0 -- Fri Mar 8 21:58:13 2013
atime: 0x513dd8f1:04df0b20 -- Mon Mar 11 14:15:29 2013
mtime: 0x513a50e5:d4e448f0 -- Fri Mar 8 21:58:13 2013
crtime: 0x513a259a:35191a3c -- Fri Mar 8 18:53:30 2013
Perintah ini mungkin membutuhkan waktu untuk kembali, mungkin karena ia juga mencantumkan setiap tingkat yang terkait dengan file.
Sekarang jika Anda ingin memesan file berdasarkan tanggal pembuatan, saya kira ini tidak mudah (juga tidak benar). Seperti yang dikatakan Gilles , mungkin akan lebih mudah jika Anda menggunakan sistem kontrol revisi. Tetapi Anda dapat mencoba melihat ext4API ...
Saya mencoba stat -c '%w' myfileperintah pada ext4filesytem pada sistem Ubuntu (cukup baru) tanpa hasil (hanya menjawab -).
f='/path/to/file'; debugfs -R "stat $f" $(df $f|(read a; read a b; echo "$a"))|grep crtime
Berikut skrip Perl yang menggunakan jawaban Totor untuk mencapai apa yang Anda inginkan (jika filesystem Anda adalah ext4).
Bekerja pada mesin rumah saya (Ubuntu) dan server saya (CentOS), tetapi tidak diuji lebih dari itu, jadi ymmv.
#!/usr/bin/env perl
use Modern::Perl '2009';
use DateTime;
# Open the current directory for reading
opendir my $dh, "." or die "Unable to open directory: $!";
# Create a hash to save results into
my %results;
my %datestamp;
# Loop through the directory getting creation date stats for each file
while ( my $filename = readdir $dh ) {
# Skip non-files
next if $filename eq '.' or $filename eq '..';
# Save the ls output for this file/directory
$results{ $filename } = `ls -ld $filename`;
my $stats = `debugfs -R 'stat $filename' /dev/sda6 2>/dev/null`;
# crtime: 0x51cd731c:926999ec -- Fri Jun 28 12:27:24 2013
$stats =~ m/crtime\: \w+\:\w+ -- (.+?)\n/s;
my $datestring = $1;
# Dissect date with a regexp, ick
my %months = (
'Jan' => '1',
'Feb' => '2',
'Mar' => '3',
'Apr' => '4',
'May' => '5',
'Jun' => '6',
'Jul' => '7',
'Aug' => '8',
'Sep' => '9',
'Oct' => '10',
'Nov' => '11',
'Dec' => '12',
);
$datestring =~ m/\w+ (\w+) ?(\d+) (\d\d)\:(\d\d)\:(\d\d) (\d\d\d\d)/;
# Convert date into a more useful format
my $dt = DateTime->new(
year => $6,
month => $months{$1},
day => $2,
hour => $3,
minute => $4,
second => $5,
);
# Save the datestamp for this result
$datestamp{ $filename } = $dt->iso8601;
}
# Output in date order
my @filenames = sort { $datestamp{$a} gt $datestamp{$b} } keys %datestamp;
foreach my $filename ( @filenames ) {
print $results{ $filename };
}
Gunakan perintah ini ls -lctuntuk mengurutkan file sesuai tanggal pembuatan.
ctimeadalah perubahan waktu, dan bukan menciptakan waktu.