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
)を含むすべてのファイルと一致します。-prune
find
サブディレクトリが一覧表示されないようにする
その他のオプション:
-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]'