আমি কীভাবে এলএস করব এবং তারপরে তৈরি তারিখ অনুসারে ফলাফলগুলি বাছাই করব?


112

তারিখটি কোন আদেশে আদেশ করা হয়? অবশ্যই বর্ণমালার ক্রম নয়।

ls -ltপরিবর্তন সময় অনুসারে বাছাই। তবে আমার সৃষ্টির সময় দরকার।



1
লিনাক্সে ফাইল তৈরির সময় পাওয়ার কোনও উপায় আছে বলে মনে হয় যদি ফাইলটি একটি এক্সট্রা ফাইল সিস্টেমে থাকে। দেখুন: unix.stackexchange.com/a/131347/182996
Kaartic

উত্তর:


94

বেশিরভাগ ইউনিসে ফাইল তৈরির সময়ের ধারণা নেই। আপনি lsএটি মুদ্রণ করতে পারবেন না কারণ তথ্য রেকর্ড করা হয়নি। আপনার যদি সৃষ্টির সময় প্রয়োজন হয় তবে একটি সংস্করণ নিয়ন্ত্রণ ব্যবস্থা ব্যবহার করুন : চেক-ইন সময় হিসাবে তৈরির সময়টিকে সংজ্ঞায়িত করুন।

যদি আপনার ইউনিক্স বৈকল্পিকের তৈরির সময় থাকে তবে এর ডকুমেন্টেশনটি দেখুন। উদাহরণস্বরূপ, ম্যাক ওএস এক্সে (আমি জানি একমাত্র উদাহরণ¹), ব্যবহার করুন ls -tU। উইন্ডোজ একটি তৈরির সময়ও সঞ্চয় করে, তবে এটি সর্বদা ইউনিক্স ইউটিলিটিগুলির পোর্টগুলির সাথে প্রকাশিত হয় না, উদাহরণস্বরূপ সাইগউইন lsএটি দেখানোর বিকল্প নেই। statউপযোগ, সৃষ্টি সময়, "জন্ম সময় 'গনুহ ইউটিলিটি ডেকে দেন, যাতে Cygwin অধীনে আপনার সাথে জন্ম সময় অনুসারে সাজানো ফাইল দেখাতে পারেন করতে পারেন stat -c '%W %n' * | sort -k1n

মনে রাখবেন যে, ctime ( ls -lc) ফাইল সৃষ্টি সময় নয় , এটা inode পরিবর্তন সময়। যখন ফাইলটি কেবল পঠন করা হয় তখনই সিটিটাইম আপডেট হয় না (টাইম আপডেট হওয়া সত্ত্বেও) যখনই ফাইলের পরিবর্তন (বিষয়বস্তু বা মেটাডেটা) সম্পর্কে কিছু থাকে তখনই ইনোড পরিবর্তনের সময় আপডেট হয়। বিশেষত, সিটিটি এমটিএম (ফাইলে বিষয়বস্তু পরিবর্তনের সময়) এর চেয়ে সর্বদা সাম্প্রতিক থাকে যদি না এমটিএমটি স্পষ্টভাবে ভবিষ্যতে কোনও তারিখে সেট না করা থাকে।


1
ইন Cygwin এটা ls -c। একত্রিত হলে এবং ls --helpকী -cকরে তা দেখায় । -l-lt
অ্যারন ডি মারাকো

6
অ্যারন না, সিটিটাইম তৈরির সময় নয়। "সিটিটাইম" এবং "ক্রিয়েশন" একই চিঠি দিয়ে শুরু হওয়া এই সত্যের উপর ভিত্তি করে এটি একটি সাধারণ বিভ্রান্তি, তবে সিটিটাইম এবং তৈরির সময়ের সাথে কোনও সম্পর্ক নেই। আমি এই বিভ্রান্তি দূর করতে আমার উত্তর আপডেট করেছি।
গিলস

আমার খারাপ। আমি আপনার জন্য সাইগউইন অংশটি নিশ্চিত করার চেষ্টা করছিলাম (আইআইআরসি আপনার মূল পোস্টে একটি সম্ভাব্য কমান্ড ছিল)। যদি আমি মনোযোগ দিতাম তবে এটি বিশেষত "সিটিটাইম (ফাইলের স্থিতির তথ্যের সর্বশেষ পরিবর্তনের সময়)" বলে say
অ্যারন ডি মারাকো

@ গিলস উত্তরে যুক্ত করা; আমি একটি এনএফএস 3.x ফাইল সার্ভার ব্যবহার করি (অন্তর্নিহিত ফাইল সিস্টেমে অনিশ্চিত; এটি ইউএফএস বা জেডএফএস হয়, যদিও আমি ইউএফএস অনুমান করছি)। রেডহ্যাট 6.x এর অধীনে: -Uতৈরির সময় অনুসারে সাজানো। সোলারিস 10.x অধীনে: /usr/bin/lsঅবলম্বন পাওয়া যায়নি -U, /usr/ucb/lsসমর্থন -Uএবং লেখার সময় সাজানোর ক্রম আছে। এই ফলাফলগুলি স্পষ্টতই সেই তথ্যটি প্রথম স্থানে সংরক্ষণের ফাইল সিস্টেমের উপর নির্ভর করে।
ব্রায়ান ভ্যান্ডেনবার্গ

1
@ঘোতি যদি কোনও ফাইল ডিরেক্টরিতে কখনও মুছে ফেলা না হয় (বা সরানো / পুনরায় নামকরণ / হার্ডলিঙ্ক /…) থাকে না, তবে ডিরেক্টরি আদেশটি কিছু ফাইল সিস্টেমে ক্রম ক্রম, তবে সমস্ত নয়। উদাহরণস্বরূপ, এটি ext4 এ সত্য নয়। আমি জানি না এটি সোলারিসের ইউএফএসে সত্য কিনা।
গিলস

16

দুর্ভাগ্যক্রমে, 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

এই কমান্ডটি ফিরে আসতে কিছুটা সময় নিতে পারে কারণ সম্ভবত এটি ফাইলের সাথে সম্পর্কিত প্রতিটি পরিমাণকেও তালিকাবদ্ধ করে।

এখন আপনি যদি তৈরির তারিখ অনুসারে ফাইলগুলি অর্ডার করতে চান তবে আমার ধারণা এটি সহজে (সঠিকভাবে) সম্ভব নয়। গিলস যেমন বলেছে, সম্ভবত আপনি যদি পুনর্বিবেচনা নিয়ন্ত্রণ ব্যবস্থা ব্যবহার করতেন তবে এটি আরও সহজ হত। তবে আপনি ext4API এ একবার দেখার চেষ্টা করতে পারেন ...

আমি সাফল্য ছাড়াই (সাম্প্রতিক পর্যায়ে) উবুন্টু সিস্টেমে ফাইলসাইমটিতে stat -c '%w' myfileকমান্ডটি চেষ্টা করেছি ext4(এটি কেবল উত্তর দেয় -)।


যদি কেউ একটি লাইনার চান:f='/path/to/file'; debugfs -R "stat $f" $(df $f|(read a; read a b; echo "$a"))|grep crtime
বুপ

3

এখানে একটি পার্ল স্ক্রিপ্ট রয়েছে যা আপনি যা চান তা অর্জন করতে টোটরের উত্তর ব্যবহার করে (যদি আপনার ফাইল সিস্টেমটি এক্সট্রা হয়)।

আমার হোম মেশিনে (উবুন্টু) এবং আমার সার্ভারে (সেন্টোস) কাজ করে তবে এর বাইরে পরীক্ষা করা হয় না, তাই 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 };
}

আরও উল্লেখ করা ভাল যে কিছু ফাইলের মেটাডেটা থাকতে পারে (যেমন এক্সিফ) যা তৈরির তারিখ / সময় রেকর্ড করে। যদি আপনার সমস্ত ফাইলের উদাহরণস্বরূপ ডিজিটাল ফটো হয়ে থাকে তবে আপনার সম্ভবত সম্ভবত এই ডেটা রয়েছে। পার্লের চিত্র :: এক্সিফটুল ব্যবহার করে এখানে একটি উদাহরণ দেওয়া হল ।
জোনাথন ক্রস

0

ls -lctতৈরির তারিখ অনুসারে ফাইলগুলি বাছাই করতে এই কমান্ডটি ব্যবহার করুন ।


2
হ্যাঁ, এটি "সঠিক" আদেশ নয়, তবে আপনি বেশিরভাগ ক্ষেত্রে
এটিই

"ফাইন্ড" দিয়ে এটি করার কোনও উপায় আছে যাতে এটি উপ-ডিরেক্টরিতে সমস্ত ফাইল এইভাবে মুদ্রণ করে?
কলিন ডি

ctimeপরিবর্তন সময়, এবং সময় তৈরি করা।
নবী KAZ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.