12 *および13 *シリーズファイルを一度に一覧表示

12 *および13 *シリーズファイルを一度に一覧表示

こんにちは。シリーズABC1 *、ABC12 *、ABC13 * ABC14 *シリーズなどで始まるファイルのリストがあります。

findコマンドを使用してABC12 *とABC13 *のリストを取得したいと思います。

次のコマンドを使用していますが、正確な結果を抽出できません。

ls -ltr |grep -e "ABC12" |find . -type f -mtime 15

答え1

-nameオプション検索モード。角括弧はORの内容を意味します。

find . -type f -name  'ABC1[23]*'

答え2

この-mtime 15意味は参考にしてください「次の24時間単位で四捨五入した年齢は15歳です。」つまり、14*24数時間前に15*24変更されたファイルです。多くの時間帯と同様に、年間1日23時間と1日25時間があります。これがあなたが望むものであると仮定し、を使用して次のことを行うzshことができます。

ls -lrtd -- **/ABC1[23](D.m15)

または:

find . -type f -name 'ABC1[23]' -mtime 15 -exec ls -lrtd {} +

ただし、ファイル数がコマンドに渡されたパラメータと環境の最大サイズを超えると、最初のファイルは失敗し、2番目のファイルを使用すると複数のインスタンスが実行されるため、リストは時系列に並べls替えられません。要求通り-t

zshGNUを使用すると、ls次のようにこの問題を解決できます。

autoload zargs
zargs -- **/ABC1[23](D.m15Om) -- ls -lUd

つまり、zsh必要に応じてリストをソートして1つ以上の呼び出しに渡しますが、リストをソートしないように指示します。他の実装では役に立ちませんが、他の無害なソートに置き換えて実行することができます。lslslsUrt

ABC17、、withのABC23代わりに->のような範囲が必要な場合は、次のようにします。ABC12ABC13zsh

ls -lrtd -- **/ABC<17-23>(D.m15)

(ただし、ABC<17-23>一致はABC17一致しませんABC0000017。これが問題の場合(glob演算子にはオプションが必要ですが)<17-23>に変更して、2桁の数字のみが一致するかどうかを確認するか、前にゼロの数字を除外します。(<17-23>~^??)extendedglobpattern~exclude(<17-23>~0*)

ファイル名の場合スタートABC12相対的なはい ABC12では、その場合は

ls -lrtd -- **/ABC<17-23>*(D.m15)

ただし、これはABC170でも一致することに注意してください。これを防ぐには:

setopt extendedglob
ls -lrtd -- **/ABC<17-23>^[0-9]*(D.m15)

つまり、<17-23>10進数で始まらないすべての項目が続きます。

これに対応する内容find(前にゼロを許可せず、多数のファイルについて上記の問題があり、ファイル名に無効な文字が含まれており、./すべてのファイルにプレフィックスがある場合に潜在的な問題があるにもかかわらず)と同じです。

find . \( -name 'ABC1[7-9]*' -o -name 'ABC2[0-3]*' \) \
       ! -name 'ABC??[0-9]*' -mtime 15 -type f \
      -exec ls -lrtd {} +

関連情報