我在目录中有一组文件。我只想从ls输出中提取没有绝对路径和修改时间戳的文件名。

/apps/dir/file1.txt
/apps/dir/file2.txt

现在从ls输出中,我提取出文件名和时间戳的字段
ls -ltr /apps/dir | awk '{print $6 $7 $8 $9}'

Sep  25  2013 /apps/dir/file1.txt
Dec  20  2013 /apps/dir/file2.txt
Dec  20  2013 /apps/dir/file3.txt

而我希望它像
Sep 25  2013 file1
Dec 20  2013 file2
Dec 20  2013 file3

一种解决方案是将cd转到该目录并从那里运行命令,但是如果没有cd,有没有解决方案?我还使用了substr(),但是由于文件名的长度不相等,因此无法将常量值传递给substr()函数。

最佳答案

使用GNU find,您可以执行以下操作以获取不带路径的文件名:

find /apps/dir -type f -printf "%f\n"

就像评论中提到的Kojiro一样,您可以使用%t%T(format)来获取修改时间。

或按照BroSlow的建议进行
find /apps/dir -printf "%Ab %Ad %AY %f\n"

请勿尝试执行以下操作(它将在带有空格的文件名上,甚至在ls -l表示形式具有更少/更多列的不同操作系统上中断:
ls -ltr /apps/dir | awk '{n=split($9,f,/\//);print $6,$7,$8,f[n]}'

07-24 09:38
查看更多