วิธีค้นหาไฟล์ใหม่ล่าสุดในไดเรกทอรีรวมถึงไดเรกทอรีย่อย?


12

ฉันกำลังมองหาวิธีใน Windows เพื่อแสดงรายการไฟล์ทั้งหมดในไดเรกทอรีที่กำหนดและไดเรกทอรีย่อยเรียงลำดับเพื่อให้ไฟล์ใหม่ล่าสุดอยู่ด้านบน มีวิธีง่าย ๆ ในการทำเช่นนี้? ฉันต้องการชำระด้วยสคริปต์ Perl

คำตอบ:


3

หากคุณยังคงสนใจในโซลูชันสคริปต์ฉันได้โยนบางอย่างเข้าด้วยกันอย่างรวดเร็วซึ่งจะแสดงไฟล์จากไดเรกทอรีทั้งหมดเข้าด้วยกัน:

#!C:/Perl/bin/perl.exe
use File::Find;

my %files = ();

sub process
{
    $files{$_} = (stat($_))[9] unless -d $_;
}

find (\&process, $ARGV[0]);

foreach my $key(sort {$files{$b} <=> $files{$a}} keys %files)
{
    print "$key\n";
}

ไฟล์จะถูกแสดงใหม่สุดไปหามากที่สุดโดยแสดงเฉพาะชื่อไฟล์ วิธีนี้คุณสามารถไพพ์เอาต์พุตของสคริปต์นี้ไปยังเครื่องมืออื่นสำหรับการประมวลผลได้อย่างง่ายดายโดยไม่ต้องกังวลกับการลอกเอาต์พุตส่วนเกิน

การใช้งาน: perl find.pl <starting_directory>


ขอบคุณ ฉันเดาว่านี่น่าจะเป็นคำถาม stackoverflow ถ้ามันไปในทิศทางนี้ :)
กีบ

1
การเปลี่ยนแปลงบางอย่างที่ฉันทำ (สำหรับความช่วยเหลือของทุกคนที่เกิดขึ้นกับสิ่งนี้): my $dir = ($#ARGV >= 0 ? $ARGV[0] : '.');เพื่อให้มันจะสแกน dir ปัจจุบันหากไม่ได้ระบุพารามิเตอร์ไดเรกทอรีและรวมเวลาที่พิมพ์:print strftime('%Y-%m-%d %H:%M:%S', localtime((stat($key))[9])) . " $key\n";
Kip

1
@Kip, mtime ควรจะเก็บไว้ใน$files{$key}ถ้าคุณต้องการที่จะใช้ว่าเมื่อพิมพ์เพื่อหลีกเลี่ยงสายที่สองไปstrftime stat()หากคุณวางแผนที่จะวางท่อไปยังโปรแกรมอื่นฉันได้ปรับเปลี่ยนเพื่อแสดงเส้นทางแบบเต็มของชื่อไฟล์ คุณสามารถคว้าได้ที่นี่: pastebin.ca/1797748
จอห์น T

ขอบคุณคุณเร็วกว่าฉัน คำสั่ง stat ใช้สำหรับไฟล์ในไดเรกทอรีปัจจุบันด้วยเช่นกันเนื่องจากคุณเก็บเฉพาะส่วนสุดท้ายของชื่อไฟล์
กีบ

7

แบบนี้: dir /s /o:-d


1
อืม ... ไม่ค่อยเหมาะนักยังคงแสดงรายการแต่ละไดเรกทอรีแยกกัน แต่ฉันสามารถทำงานกับมันได้
Kip

5

หากคุณมี cygwin หรือติดตั้งที่คล้ายกันแล้วfind . -type f | xargs ls -trจะทำเคล็ดลับ คุณเกือบจะสามารถทำสิ่งที่คล้ายกับ PowerShell ของ Microsoft ได้อย่างแน่นอน


3

ในกรณีที่คุณใช้ทุกอย่างเพียงพิมพ์พา ธ และเรียงลำดับตามวันที่แก้ไขและคุณจะได้รับไฟล์ทั้งหมดในโฟลเดอร์นี้ตามลำดับโดยไม่คำนึงถึงไดเรกทอรีย่อย

ทุกอย่างเป็นฟรีแวร์มีรุ่นพกพาให้ใช้


1

หากคุณไม่สนใจการเขียนโค้ด (แม้ว่าจะนำคำถามไปสู่สแต็คโอเวอร์โฟลว์ดินแดน) ก็มีDirectoryและFileคลาสใน C #

GetFilesวิธีมีเกินที่จะกลับมาทุกไฟล์ในไดเรกทอรีย่อยทั้งหมด จากนั้นคุณสามารถวนซ้ำรายการนี้เรียกGetLastWriteTimeเพื่อรับวันที่ / เวลาที่แก้ไข จัดเก็บชื่อและเวลาในพจนานุกรมเรียงลำดับเวลาและพิมพ์ชื่อไฟล์

นอกจากนี้ยังมีDirectoryInfoและFileInfoชั้นเรียน

ฉันควรจะเพิ่มว่าฟังก์ชั่นทั้งหมดนี้สามารถใช้ได้ผ่านPowershellดังนั้นคุณจึงไม่สามารถเข้าถึง IDE แบบเต็ม


ขอบคุณ ฉันเป็นนักพัฒนา แต่ส่วนใหญ่ในจาวา ฉันถามที่นี่โดยหวังว่าจะมีตัวเลือกเชลล์ให้ใช้งาน
Kip

@Kip - ฉันรู้เมื่อคืนที่แล้วหลังจากฉันออกจากระบบแล้วฉันควรจะพูดถึง Powershell - technet.microsoft.com/en-us/scriptcenter/dd742419.aspx - เป็นภาษาสคริปต์ แต่คุณสามารถเข้าถึง. NET runtime
ChrisF

1

หากคุณมีบางอย่างเช่น Git Bash หรือ Cygwin ติดตั้งคุณควรใช้คำตอบอย่างใดอย่างหนึ่งจากที่นี่: /programming/4561895/how-to-recursively-find-the-latest-modified แฟ้ม: หนึ่งในไดเรกทอรี

สิ่งหนึ่งที่ทำงานได้ดีสำหรับฉันคือ: find . -type f -printf '%TF %TT %p\n' | sort -r

นอกจากนี้คุณยังสามารถเพิ่ม| head -10ในส่วนท้ายเพื่อดูเฉพาะ 10 รายการล่าสุดได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.