2017-08-03 8 views
0

ディレクトリDIRに最新のファイル-が必要です。位置が原因​​の間のスペースのたびにシフトしているようパターンのあるディレクトリでファイル名を見つける

以下の作業をされていません(それは毎回異なるので、ファイルサイズのフィールドで主に起こる。)

他の方法があるかどうか提案してください。

report =‘ls -ltr $DIR/filename_* 2>/dev/null | tail -1 | cut -d “ “ -f9’ 
+0

'ls -1t |ヘッド-n 1 '? – archemiro

答えて

0

最後のフィールドを切り捨てるのにAWKを使用できます。

report=`ls -ltr $DIR/filename_* 2>/dev/null | tail -1 | awk '{print $NF}'` 

以下のようなカットは、私はあなたがディレクトリ内の各ファイルかかわらループしたい理解し、最大'YYYYMMDD'値とその値に関連付けられたファイル名を提出する場合は、使用することができ、ここで

0

選択肢ではないかもしれません単純な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'を持つファイルとして探します。

シェル自体が提供するツールのみを使用しているため、呼び出すパイプまたはユーティリティごとにサブシェルを生成する必要はありません。

テストを行い、それが意図したものかどうか、あなたの意図が違うかどうかを教えてください。それ以上の質問がある場合はお知らせください。

関連する問題