2017-08-03 50 views
0

我需要在目录DIR中找到最新的文件 - filename_YYYYMMDD使用模式在目录中查找文件名

的下面未正常工作位置的每个时移,因为空间之间(在文件大小字段大多发生,因为它的不同之每一次。)

请建议,如果有其他方式。

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

'ls -lt |头-n 1'? – archemiro

回答

0

您可以使用AWK剪切最后一个字段。像下面

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

切可能不会在这里

0

如果我知道你想循环,虽然目录中的每个文件和文件最大'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本身提供的工具,因此不需要为其调用的每个管道或实用程序生成子壳体。

给它一个测试,让我知道如果这是你的意图,让我知道你的意图是不同的,或者如果你有任何进一步的问题。

相关问题