我需要在目錄DIR中找到最新的文件 - filename_YYYYMMDD
。使用模式在目錄中查找文件名
的下面未正常工作位置的每個時移,因爲空間之間(在文件大小字段大多發生,因爲它的不同之每一次。)
請建議,如果有其他方式。
report =‘ls -ltr $DIR/filename_* 2>/dev/null | tail -1 | cut -d 「 「 -f9’
我需要在目錄DIR中找到最新的文件 - filename_YYYYMMDD
。使用模式在目錄中查找文件名
的下面未正常工作位置的每個時移,因爲空間之間(在文件大小字段大多發生,因爲它的不同之每一次。)
請建議,如果有其他方式。
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
的值進行比較,更新latest
變量以保留最大的'YYYYMMDD'
,因爲您將循環查看目錄中的所有文件。每次找到較大的文件'YYYYMMDD'
時,都可以存儲文件的name
。
例如,你可以這樣做:
#!/bin/sh
name=
latest=0
for i in *; do
test "${i##*_}" -gt "$latest" && { latest="${i##*_}"; name="$i"; }
done
printf "%s\n" "$name"
example目錄
$ 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
示例使用/輸出
$ name=; latest=0; \
> for i in *; do \
> test "${i##*_}" -gt "$latest" && { latest="${i##*_}"; name="$i"; }; \
> done; \
> printf "%s\n" "$name"
filename_20120615
當腳本選擇filename_20120615
作爲目錄中所有文件的最大'YYYYMMDD'
的文件。
由於您僅使用由shell本身提供的工具,因此不需要爲其調用的每個管道或實用程序生成子殼體。
給它一個測試,讓我知道如果這是你的意圖,讓我知道你的意圖是不同的,或者如果你有任何進一步的問題。
'ls -lt |頭-n 1'? – archemiro