ディレクトリDIRに最新のファイル-が必要です。位置が原因の間のスペースのたびにシフトしているようパターンのあるディレクトリでファイル名を見つける
以下の作業をされていません(それは毎回異なるので、ファイルサイズのフィールドで主に起こる。)
他の方法があるかどうか提案してください。
report =‘ls -ltr $DIR/filename_* 2>/dev/null | tail -1 | cut -d “ “ -f9’
ディレクトリDIRに最新のファイル-が必要です。位置が原因の間のスペースのたびにシフトしているようパターンのあるディレクトリでファイル名を見つける
以下の作業をされていません(それは毎回異なるので、ファイルサイズのフィールドで主に起こる。)
他の方法があるかどうか提案してください。
report =‘ls -ltr $DIR/filename_* 2>/dev/null | tail -1 | cut -d “ “ -f9’
最後のフィールドを切り捨てるのにAWKを使用できます。
report=`ls -ltr $DIR/filename_* 2>/dev/null | tail -1 | awk '{print $NF}'`
以下のようなカットは、私はあなたがディレクトリ内の各ファイルかかわらループしたい理解し、最大'YYYYMMDD'
値とその値に関連付けられたファイル名を提出する場合は、使用することができ、ここで
選択肢ではないかもしれません単純なPOSIX parameter expansion with substring removalを使用して'YYYYMMDD'
を隔離し、zero
に初期化された値と比較して、ディレクトリ内のすべてのファイルをループするときに'YYYYMMDD'
の最大値を保持するように変数latest
を更新します。 'YYYYMMDD'
が見つかるたびにファイルのname
を保存することができます。スクリプトがを選択どこ/出力
$ name=; latest=0; \
> for i in *; do \
> test "${i##*_}" -gt "$latest" && { latest="${i##*_}"; name="$i"; }; \
> done; \
> printf "%s\n" "$name"
filename_20120615
#!/bin/sh
name=
latest=0
for i in *; do
test "${i##*_}" -gt "$latest" && { latest="${i##*_}"; name="$i"; }
done
printf "%s\n" "$name"
例ディレクトリ
$ ls -1rt
filename_20120615
filename_20120612
filename_20120115
filename_20120112
filename_20110615
filename_20110612
filename_20110115
filename_20110112
filename_20100615
filename_20100612
filename_20100115
filename_20100112
使用例:
たとえば、次のような何かを行うことができますを、ディレクトリ内のすべてのファイルの中で最大の'YYYYMMDD'
を持つファイルとして探します。
シェル自体が提供するツールのみを使用しているため、呼び出すパイプまたはユーティリティごとにサブシェルを生成する必要はありません。
テストを行い、それが意図したものかどうか、あなたの意図が違うかどうかを教えてください。それ以上の質問がある場合はお知らせください。
'ls -1t |ヘッド-n 1 '? – archemiro