Linux findコマンドでPerlに似た正規表現を使用できますか?

Linux findコマンドでPerlに似た正規表現を使用できますか?

findコマンドを使用してファイルを検索するときは、find perlスタイルの正規表現を使用したいと思います。この機能は現在サポートされていないようです。

有効な型は、'findutils-default'、'ed'、'emacs'、'gnu-awk'、'grep'、'posix-awk'、'awk'、'posix-basic'、'posix-egrep'、'です。 egrep', 'posix-extend', 'posix-minimal-basic', 'sed'

findコマンドにperl正規表現エンジンを追加する方法はありますか?

私はそれを基本的なfindで使用したいと思います。 findの出力をgrepや他のプログラムにパイプしたくありません。

ベストアンサー1

1つのプロセスのみを使用する1つの方法は、純粋なパールそしてFile::Find基準寸法

その後、コアに含まれているので、perl5何もインストールする必要はありません。

$ corelist File::Find

Data for 2021-05-20
File::Find was first released with perl 5

find2perlスクリプトがありますそこ

一般的なコマンドでPerlコードを生成できますfind

find2perl [paths] [predicates] 

前任者:

$ find2perl . -type f -name '*l'
#! /usr/bin/perl -w
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
        if 0; #$running_under_some_shell

use strict;
use File::Find ();

# Set the variable $File::Find::dont_use_nlink if you're using AFS,
# since AFS cheats.

# for the convenience of &wanted calls, including -eval statements:
use vars qw/*name *dir *prune/;
*name   = *File::Find::name;
*dir    = *File::Find::dir;
*prune  = *File::Find::prune;

sub wanted;
   
# Traverse desired filesystems
File::Find::find({wanted => \&wanted}, '.');
exit;

sub wanted {
    my ($dev,$ino,$mode,$nlink,$uid,$gid);

    (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
    -f _ &&                 # -type f
    /^.*l\z/s               # ^.*l$ regex to modify as you want
    && print("$name\n");    # -print
}

今あなたは~によると解決を始めてください。独自の正規表現を使用して、必要に応じてPerl正規表現を変更できます。

使用法:

find2perl -type f -name '*l' > myPerlFind.pl
chmod +x myPerlFind.pl
$EDITOR myPerlFind.pl
./myPerlFind.pl

@ARGV以下を使用することも、より良い方法でスクリプトに引数を渡すこともできます。Getopt::長い

おすすめ記事