GNU/Linux >> Belajar Linux >  >> Linux

Temukan File Untuk Beberapa Variasi Pada Nama File Yang Ada Bersama Di Direktori Yang Sama?

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";
    }
}

Linux
  1. Cara memeriksa file besar di konsol

  2. Apa Cara Terbaik Untuk Menghitung Jumlah File Dalam Direktori?

  3. Debian – Cari File Modifikasi Terakhir Dalam 2 Menit Terakhir Di Direktori Rumah Anda Yang Mengandung String Tertentu?

  1. Grep Untuk Beberapa String Dalam File, Dan Kemudian Buat Daftar File Dalam Urutan Ukuran?

  2. Linux – Mendapatkan File Untuk Tanggal Saat Ini Di Linux?

  3. temukan:jalur harus mendahului ekspresi:Bagaimana cara menentukan pencarian rekursif yang juga menemukan file di direktori saat ini?

  1. Hasilkan Md5sum Untuk Semua File Dalam Direktori, Dan Kemudian Tulis (nama file).md5 Untuk Setiap File Yang Berisi Md5sum File Itu?

  2. Menghapus bagian dari nama file untuk banyak file di Linux

  3. Bagaimana cara mengetahui antarmuka mana yang saya gunakan untuk terhubung ke internet?