
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
または。err
out
(...)?
:オプション(?
)...
です...
。\.[0-9]{4}-[0-9]{2}-[0-9]{2}
、リテラル.
の後に4
0〜9の範囲の文字が続き、LC_ALL=C
もう一度0123456789という制限があるため、-
その数のうち2つと-
2つの数字が続きます。
BSDを使用すると、述語の代わりにオプションを使用して引数を拡張正規表現としてfind
扱うことができます。-E
-regextype posix-extended
-regex