場合によっては、スクリプトの一部を無視しますか?

場合によっては、スクリプトの一部を無視しますか?

私のスクリプトは次のとおりです

strenggen ( ) { something; }

strengen 1 
strengen 2
strengen 3
strengen 4
strengen 5
etc..

strengen?string=1etc.というディレクトリにいくつかのファイルを追加します。strengen?string=2私がやりたいことは、スクリプトを終了して再度実行すると、13、14、60000、または140000のうち最後に実行された数字を見つけるようにすることです。私はファイル名に最後の番号が含まれているので、最後に変更されたファイルを見つけてその番号(たとえば、類似のfind . -type f -print0 | xargs -0 stat -f "%m %N" | sort -rn | head -1 | cut -f2- -d" "もの)をコピーできると思いました。文字列をsedすると開始番号を取得できますが、他の行を無視する方法がわかりません。

答え1

次のコマンドは、最新の「strengen」ファイルの番号を変数に入れます$LATEST

LATEST=$(/bin/ls -1t | grep `^strengen` | head -1 | sed -e 's/strengen.*=//')

ここでは、出力に影響を与える可能性のあるエイリアスを削除するために、エイリアスだけでなく/bin/ls非常に一般的なエイリアスも使用しています。lsls -1ls

また、ls私が使用したオプションは(文字)の-1代わりに(数字1)です。これは、1行に1つのファイルをリストすることを意味します。このオプションは、最新の項目から時系列に並べ替えることを示します。-llls-tls

別のオプションは、関数の上部に次のようなものを置くことですstrenggen()

[ -e "strengen?string=$1" ] && return

ファイルがすでに存在する場合は、何も実行せず、関数はすぐに返されます。

関連情報