linux shell获取文件名

时间:2012-03-08 15:56:56

标签: linux bash shell

我正在编写shell脚本。

我有以下文件:

2012-03-08_16-37-41
2012-03-08_16-37-43
2012-03-08_16-37-46
2012-03-08_16-37-55

简单的脚本:

#!/bin/bash
FILENAME= ????
echo $FILENAME

FILENAME值应为2012-03-08_16-37-55(已排序文件名列表的最后一个元素)。此外,文件名的开头应为2012

我怎么能解决这个问题?

5 个答案:

答案 0 :(得分:5)

FILENAME=$(ls -r 2012* | head -n 1)

答案 1 :(得分:2)

不要parse ls输出。相反,请使用find:

#!/bin/sh

find . -name 2012* | sort | tail -1

将结果分配给变量:

#!/bin/sh

filename=$(find . -name 2012* | sort | tail -1)

这也使您可以访问所有many options find has,包括(不)以下符号链接,递归,仅返回文件(不是目录),检查时间戳等。

答案 2 :(得分:1)

您可以使用ls命令获取文件,也可以使用“文件通配”来扩展通配符。

#!/bin/sh

for filename in 2012*; do
  echo "File (by globbing) is $filename"
done

ls 2012* | while read filename; do
  echo "File (via ls) is $filename"
done

要获得最后一个,最简单的方法可能是对ls输出进行排序:

filename=`ls -r 2012* | head -1`

但是如果你想弄乱的话,你也可以拖尾。

for filename in 2012*; do
  echo "File (by globbing) is $filename"
done | tail -1

答案 3 :(得分:0)

f=""; 
for f in 2012* ; 
do
  # haha - don't do anything. 
  dummy=42
done; 
echo "now do something with $f"

答案 4 :(得分:0)

不使用任何外部命令:set 2012*; eval FILE=\$$#。这是eval的完全安全使用。