名前に指定された入力日付以下の日付値を含むファイルを取得します。

名前に指定された入力日付以下の日付値を含むファイルを取得します。

私のフォルダの1つに次の形式のファイルが含まれています。

3_20150412104422154033.txt
3_2015041211022775012.txt
3_20150412160410171639.txt
3_20150412160815638933.txt
3_20150413161046573097.txt
3_20150413161818852312.txt
3_20150413163054600311.txt
3_20150413163514489159.txt
3_2015041321292659391.txt
3_20150414124528747462.txt
3_20150414125110440425.txt
3_20150414134437706174.txt
3_20150415085045179056.txt
3_20150415100637970281.txt
3_20150415101749513872.txt

日付値が入力日付値以下であるファイルを検索したいと思います。

たとえば、「3_20150414」(3_YYYYMMDD)と入力すると、出力がファイル名になることを望みます。

3_20150412104422154033.txt
3_2015041211022775012.txt
3_20150412160410171639.txt
3_20150412160815638933.txt
3_20150413161046573097.txt
3_20150413161818852312.txt
3_20150413163054600311.txt
3_20150413163514489159.txt
3_2015041321292659391.txt
3_20150414124528747462.txt
3_20150414125110440425.txt
3_20150414134437706174.txt

次のコマンドを実行してファイルを一覧表示できます。

ls -l | grep '20150413\|20150414' |awk '{print $NF}'

しかし、私は一つを見つけようとしています。<=マッチ。

ベストアンサー1

awk文字列比較演算子で、およびを使用できます。

ls | awk '$0 < "3_20150415"'

変数から:

max=3_20150414 export max
ls | LC_ALL=C awk '$0 <= ENVIRON["max"] "z"'

ここで「z」を連結すると、比較は文字列比較であり、ロケール内の数字がC前にソートされるため、1日中いつでも許可されますz

では、zsh次のこともできます。

print -rC1 -- *.txt(e['[[ $REPLY < ${max}z ]]'])

おすすめ記事