我需要在目录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