Saya ingin membuat daftar file yang ada, di direktori tertentu, SEMUA file ini:
<filename>.wed<filename>.tis<filename>.are<filename>LM.bmp
Saat ini saya melakukannya dengan find dan sed . Ini berfungsi tetapi tidak elegan dan lambat!
find . -iname "*.wed" -exec echo {} \; | sed s/.wed$// $1 | sed s/..// $1 | while read in; do find . -name "$in.are"; done | sed s/.are$// $1 | sed s/..// $1 | while read in; do find . -name "$in.tis"; done | sed s/.tis$// $1 | sed s/..// $1 | while read in; do find . -name "$in*.bmp"; done
Pada dasarnya saya merantai find , dua sed dan while read untuk setiap ekstensi yang ingin saya filter.
Dibutuhkan> 35 detik untuk hampir 30 ribu file! Bagaimana cara meningkatkannya?
Contoh
Jika di direktori tersebut terdapat file bernama AR0505.are , AR0505.tis , AR0505.wed dan AR0505LM.bmp , maka skrip akan mencetak “AR0505”.
Jika satu atau beberapa file ini hilang, skrip tidak akan mencetaknya.
Jawaban yang Diterima:
Saya pikir hambatan utama adalah jumlah proses yang Anda lakukan. Berikut adalah skrip sederhana yang mencantumkan dan memfilter direktori Anda dalam sekali jalan:
#!/usr/bin/perl
use strict;
use warnings;
my %files;
my $dir;
my @extensions = ("\.tis","\.are","LM\.bmp","\.wed");
opendir($dir, ".") || die "Error opening dir\n";
while (my $file = readdir($dir)) {
foreach my $ext (@extensions) {
if ($file =~ /^(.*)$ext$/sm) {
$files{$1} += 1;
}
}
}
closedir($dir);
foreach my $file (keys %files) {
if ($files{$file} == scalar(@extensions)) {
print "$file\n";
}
}
Bagaimana Cara Mengubah Frasa Sandi Kunci Rahasia Gpg dengan Benar?
Apakah `~#` Sebuah Ekspansi Tilde Dari Bash?