検索でのファイルのフィルタリング

検索でのファイルのフィルタリング

ls日付とタイムスタンプを含むファイルがありますが、次のように出力から除外したいと思います。

 test.log.15-05-25_20:41:05.20150611
 test.log.15-05-27_20:28:32.20150611
 test.log.15-05-26_20:29:40.20150611
 test.log.
 test-file~df_gp~1.log.
 test.log.20150616
 test.log.15-05-28_20:28:27.20150616
 test.log.15-05-27_20:28:32.20150616
 test.log.15-05-26_20:29:40.20150616
 test.log.15-05-25_20:41:05.20150616
 test-bat-test.log.

出力には、次のファイルのみをリストする必要があります。つまり、日付とタイムスタンプを含むファイルは省略する必要があります。

 test.log.
 test-file~df_gp~1.log.
 test-bat-test.log.

私ができる方法はありますか?

ベストアンサー1

GNUを使用できますfind

 find * -regextype posix-extended \! -regex '.*[0-9]{8}.*' -prune

日付が常に文字列の末尾にあり、前に来る場合は、正規表現.を使用して.*\.[0-9]{8}それを反映し、ファイルを誤って除外するリスクを減らすこともできます。

仕組み:

  • -regextype posix-extended以下の正規表現に適した正規表現の種類を選択してください。
  • \!次の文の意味を否定してください
  • -regex '.*[0-9]{8}.*'連続した8桁の数字(形式の日付など20150616)を含むすべてのファイルと一致します。
  • -prunefindサブディレクトリが一覧表示されないようにする

その他のオプション:

  • -fファイルのみをリストするオプションの追加

編集する:

正規表現をサポートしていないAIXでは、find以下を使用できます(標準グローバルメカニズムを使用)。

find * \! -name '*[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*' -prune

または、日付が常に文字列の末尾にあり、前に来る場合は、.次のパターンを使用できます。*.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]

編集2:

ファイルをで開始するには、次のものをtest使用できます。

find * -prune -type f \! -name 'test*.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'

シェルを介したファイル名拡張子を使用したくない場合、そのディレクトリに他のディレクトリがない場合は、次のものを使用することもできます。

find . -type f \! -name 'test*.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'

おすすめ記事