তারিখটি কোন আদেশে আদেশ করা হয়? অবশ্যই বর্ণমালার ক্রম নয়।
ls -lt
পরিবর্তন সময় অনুসারে বাছাই। তবে আমার সৃষ্টির সময় দরকার।
তারিখটি কোন আদেশে আদেশ করা হয়? অবশ্যই বর্ণমালার ক্রম নয়।
ls -lt
পরিবর্তন সময় অনুসারে বাছাই। তবে আমার সৃষ্টির সময় দরকার।
উত্তর:
বেশিরভাগ ইউনিসে ফাইল তৈরির সময়ের ধারণা নেই। আপনি ls
এটি মুদ্রণ করতে পারবেন না কারণ তথ্য রেকর্ড করা হয়নি। আপনার যদি সৃষ্টির সময় প্রয়োজন হয় তবে একটি সংস্করণ নিয়ন্ত্রণ ব্যবস্থা ব্যবহার করুন : চেক-ইন সময় হিসাবে তৈরির সময়টিকে সংজ্ঞায়িত করুন।
যদি আপনার ইউনিক্স বৈকল্পিকের তৈরির সময় থাকে তবে এর ডকুমেন্টেশনটি দেখুন। উদাহরণস্বরূপ, ম্যাক ওএস এক্সে (আমি জানি একমাত্র উদাহরণ¹), ব্যবহার করুন ls -tU
। উইন্ডোজ একটি তৈরির সময়ও সঞ্চয় করে, তবে এটি সর্বদা ইউনিক্স ইউটিলিটিগুলির পোর্টগুলির সাথে প্রকাশিত হয় না, উদাহরণস্বরূপ সাইগউইন ls
এটি দেখানোর বিকল্প নেই। stat
উপযোগ, সৃষ্টি সময়, "জন্ম সময় 'গনুহ ইউটিলিটি ডেকে দেন, যাতে Cygwin অধীনে আপনার সাথে জন্ম সময় অনুসারে সাজানো ফাইল দেখাতে পারেন করতে পারেন stat -c '%W %n' * | sort -k1n
।
মনে রাখবেন যে, ctime ( ls -lc
) ফাইল সৃষ্টি সময় নয় , এটা inode পরিবর্তন সময়। যখন ফাইলটি কেবল পঠন করা হয় তখনই সিটিটাইম আপডেট হয় না (টাইম আপডেট হওয়া সত্ত্বেও) যখনই ফাইলের পরিবর্তন (বিষয়বস্তু বা মেটাডেটা) সম্পর্কে কিছু থাকে তখনই ইনোড পরিবর্তনের সময় আপডেট হয়। বিশেষত, সিটিটি এমটিএম (ফাইলে বিষয়বস্তু পরিবর্তনের সময়) এর চেয়ে সর্বদা সাম্প্রতিক থাকে যদি না এমটিএমটি স্পষ্টভাবে ভবিষ্যতে কোনও তারিখে সেট না করা থাকে।
-U
তৈরির সময় অনুসারে সাজানো। সোলারিস 10.x অধীনে: /usr/bin/ls
অবলম্বন পাওয়া যায়নি -U
, /usr/ucb/ls
সমর্থন -U
এবং লেখার সময় সাজানোর ক্রম আছে। এই ফলাফলগুলি স্পষ্টতই সেই তথ্যটি প্রথম স্থানে সংরক্ষণের ফাইল সিস্টেমের উপর নির্ভর করে।
দুর্ভাগ্যক্রমে, stat(2)
এপিআই ফাইল তৈরির সময় পাওয়ার কোনও উপায় সরবরাহ করে না, কারণ এটি ইউনিক্স মান দ্বারা প্রয়োজনীয় নয় ।
যাইহোক, কিছু ফাইল সিস্টেম, যেমন ext4
, ফাইল metadatas মধ্যে আপনার এই তথ্য সংরক্ষণ করি। এটি পাওয়ার জন্য কোনও স্ট্যান্ডার্ড উপায় নেই, তবে একটি উপায় রয়েছে ( ext
কেবলমাত্র ফাইল সিস্টেমগুলি):
debugfs -R 'stat partition/relative/path/to/file' /dev/sda1
আপনি যদি ব্যবহার করেন তবে আপনি সেই উল্লেখের মতো কিছু পাবেন crtime
( না ctime
!) 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
এই কমান্ডটি ফিরে আসতে কিছুটা সময় নিতে পারে কারণ সম্ভবত এটি ফাইলের সাথে সম্পর্কিত প্রতিটি পরিমাণকেও তালিকাবদ্ধ করে।
এখন আপনি যদি তৈরির তারিখ অনুসারে ফাইলগুলি অর্ডার করতে চান তবে আমার ধারণা এটি সহজে (সঠিকভাবে) সম্ভব নয়। গিলস যেমন বলেছে, সম্ভবত আপনি যদি পুনর্বিবেচনা নিয়ন্ত্রণ ব্যবস্থা ব্যবহার করতেন তবে এটি আরও সহজ হত। তবে আপনি ext4
API এ একবার দেখার চেষ্টা করতে পারেন ...
আমি সাফল্য ছাড়াই (সাম্প্রতিক পর্যায়ে) উবুন্টু সিস্টেমে ফাইলসাইমটিতে stat -c '%w' myfile
কমান্ডটি চেষ্টা করেছি ext4
(এটি কেবল উত্তর দেয় -
)।
f='/path/to/file'; debugfs -R "stat $f" $(df $f|(read a; read a b; echo "$a"))|grep crtime
এখানে একটি পার্ল স্ক্রিপ্ট রয়েছে যা আপনি যা চান তা অর্জন করতে টোটরের উত্তর ব্যবহার করে (যদি আপনার ফাইল সিস্টেমটি এক্সট্রা হয়)।
আমার হোম মেশিনে (উবুন্টু) এবং আমার সার্ভারে (সেন্টোস) কাজ করে তবে এর বাইরে পরীক্ষা করা হয় না, তাই 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 };
}