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::長い