検索コマンドで複数の単語を検索するには?

検索コマンドで複数の単語を検索するには?
find $path1 $path2 -regex '.*\(\.log\|\.err\|\.out\)' -mtime -10 -exec cp "{}" $destination \;

これは、上記の拡張子を持つファイル名を見つけるために私のスクリプトにあるコマンドです。私のファイルの中には「filename.extension.date」が含まれていますが、検索できないことがわかるまで成功しました。そのため、ファイル(filename.extension.dateとfilename.extension)を取得できるように、拡張子の代わりに「単語/文字列」を探したいファイルを見つけるために-inameも使用しましたが、わかりません。 )。

ベストアンサー1

.log.err//まだ追加ファイルをコピーしたい場合.out。日付サフィックスを使用し、次のことを想定します。日付sはYYYY-MM-DD形式であり、GNU find(正規表現で使用されていることを示す)とGNUを想定すると、cp次のことができます。

LC_ALL=C find "$path1" "$path2" \
  -regextype posix-extended \
  -regex '.*\.(log|err|out)(\.[0-9]{4}-[0-9]{2}-[0-9]{2})?' \
  -type f \
  -exec cp -t "$distination" {} +

YYYYMMDD日付など[0-9]{4}-[0-9]{2}-[0-9]{2}に変更してください。[0-9]{8}

拡張.*\.(log|err|out)(\.[0-9]{4}-[0-9]{2}-[0-9]{2})?正規表現の一致:

  • .*:任意の数(*)の文字(.)。これはLC_ALL=C、ユーザーのロケールで有効な文字を形成する必要がないすべてのバイトを意味します。以下は:
  • \.:テキスト.(ドット/ピリオド)。以下は:
  • (log|err|out)logまたは。errout
  • (...)?:オプション(?...です...
  • \.[0-9]{4}-[0-9]{2}-[0-9]{2}、リテラル.の後に40〜9の範囲の文字が続き、LC_ALL=Cもう一度0123456789という制限があるため、-その数のうち2つと-2つの数字が続きます。

BSDを使用すると、述語の代わりにオプションを使用して引数を拡張正規表現としてfind扱うことができます。-E-regextype posix-extended-regex

おすすめ記事