我需要在目录DIR中找到最新文件 - filename_YYYYMMDD
。
以下不起作用,因为位置每次都在移动,因为它们之间的空格(主要发生在文件大小字段,因为它每次都不同。)
如果有其他方式,请建议。
report =‘ls -ltr $DIR/filename_* 2>/dev/null | tail -1 | cut -d “ “ -f9’
答案 0 :(得分:0)
您可以使用AWK剪切最后一个字段。如下所示
report=`ls -ltr $DIR/filename_* 2>/dev/null | tail -1 | awk '{print $NF}'`
切割可能不是一个选项
答案 1 :(得分:0)
如果我了解你想循环遍历目录中的每个文件并提交最大'YYYYMMDD'
值和与该值相关联的文件名,则可以使用简单POSIX parameter expansion with substring removal来隔离{{1}并且,当您遍历目录中的所有文件时,与初始化为'YYYYMMDD'
的值进行比较,以更新zero
变量以保留最大latest
。每次找到较大的'YYYYMMDD'
时,您都可以存储文件的name
。
例如,您可以执行以下操作:
'YYYYMMDD'
示例目录
#!/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
脚本选择$ name=; latest=0; \
> for i in *; do \
> test "${i##*_}" -gt "$latest" && { latest="${i##*_}"; name="$i"; }; \
> done; \
> printf "%s\n" "$name"
filename_20120615
作为目录中所有文件中filename_20120615
个最大的文件。
由于您只使用shell本身提供的工具,因此不需要为它调用的每个管道或实用程序生成子shell。
进行测试并告诉我这是否符合您的意图,如果您的意图不同,或者您有任何其他问题,请告诉我。