我正在尝试分配从下面的 ls 命令获取的最新文件名,但是出现了一些错误,如果有人能回答我该如何解决这个问题就太好了!
fn=`ls -lrt pur_bom_interface_daily*.log | cut -c59-102 | tail -1`
或者
fn=$(ls -lrt pur_bom_interface_daily*.log | cut -c59-102 | tail -1)
错误出现:
ls: 0653-341 The file pur_bom_interface_daily*.log does not exist
注意:pur_bom_interface_daily*.log
我之所以使用,是*
因为有多个文件的名称以创建日期开头pur_bom_interface_daily
,并与创建日期连接。
答案1
除非当前工作目录中不存在 pur_bom_interface_daily*.log 文件,否则第二行脚本应该可以正常工作。为了证明这一点,请尝试以下示例代码块:
mkdir logfiles
cd logfiles
touch log-{1..4}.log
fn=$(ls -lrt log-*.log)
echo "$fn"
最后一个命令的结果应该列出您使用创建的 4 个新日志文件touch
。
如果您将第四行替换为以下内容,示例代码块也应该可以正常工作:
fn=$(ls -lrt log-*.log | cut -c1-59 | tail -4)
...尽管您可能必须将其更改59
为不同的数字,以使每行的输出具有有意义的长度(59 是上面代码行中每行输出的长度)。
答案2
使用反引号会将所有 stdout 分配给变量,每个参数之间都有空格,文件名中的空格会搞砸这一点。要将第一个或最后一个管道放入头部或尾部,请尝试:
fn=`ls -rt -1 * | tail -1`
选项-1
onls
表示每行一个文件。选项-1
ontail
表示仅限最后一行。