我在目录中有一组文件。我只想从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]}'