私はbashスクリプトの初心者です。以下の助けが必要です。 inotifywaitを使用してディレクトリを監視するスクリプトがあります。別のプロセスは一晩csvファイルを削除します。このファイルの形式は次のとおりです。ファイル名_YYYYMMDD.csv。私のスクリプトは最も古いタイムスタンプファイルをインポートして名前を変更します。ファイル名.csvこれにより、他の外部プロセスで使用する準備が整いました。完璧な世界では、ファイルが入り、タイムスタンプなしで名前が変更され、処理されます。外部プロセスはファイルをアーカイブフォルダに移動します。外部プロセスが閉じられると、タイムスタンプ付きのファイルがフォルダに蓄積されます。私のスクリプトはディレクトリにアクセスすると最初のファイルの名前を変更しますが、残りのファイルは最初のファイルが保存されるまで変更されていません。その後、私のスクリプトは最も古いファイルを見つけて名前を変更して終了します。
タイムスタンプを含むファイルが最初にディレクトリにアクセスすると、私のスクリプトは名前のタイムスタンプを確認します。
regex='_[0-9]{4}[0-9]{2}[0-9]{2}(.csv)$'
if [[ $file =~ $regex ]]; then
これは素晴らしい作品です。というファイルがあることを確認します。ファイル名.csv。それ以外の場合はファイル名が変更されます。
ファイルを処理してアーカイブすると、スクリプトはファイルが消えたことを検出し、デフォルト名を取得し、そのベース名と一致する次の最も古いファイルを見つけて名前を変更して終了します。
最後に助けが必要なところがここです。パターンに一致する最も古いファイルを見つけるには、次のコードをどのように変更しますか?既定の名前だけを探している場合は、次のような誤った形式のファイル名を選択してください。ファイル名_YYMM、それは私がしたくないです。
unset -v oldest
for f in $mybasename*; do
[[ -z $oldest || $f -ot $oldest ]] && oldest=$f
done
今$ mybasenameはファイル名。次の正規表現をどのように使用できますか?
regex='$mybasename_[0-9]{4}[0-9]{2}[0-9]{2}(.csv)$'
for f in $regex; do
[[ -z $oldest || $f -ot $oldest ]] && oldest=$f
done
ありがとうございます!