有没有一种方法可以使用LS + AWK,SED,GREP或类似工具获取路径/到/文件?

StackOverflow https://stackoverflow.com/questions/4351096

  •  08-10-2019
  •  | 
  •  

我想递归搜索目录,然后输出:

文件名日期路径大小

除了路径之外,我得到了一切...这是$$$$ buster。

到目前为止,这是我的命令:

ls -lThR {DIRECTORY_NAME_HERE} | awk '/^-/ {print $10 " " $6 " " $7 " " $8 " " $5}'

我希望有一种方法可以将该命令与:

find ./{DIRECTORY_NAME_HERE} -type f 

仅显示/路径/到/文件名本身...没有其他元数据Afaik。

有什么想法...希望不需要编程语言吗?

编辑: :这是我正在寻找的确切输出,假设文件为5个字节:

myfile.txt 12月2日10:58 /路径5

更新: :这是我结束的命令:

find ./{DIRECTORY_NAME_HERE} -type f -ls | 
while read f1 blocks perms blocks owner group size mon day third file; 
do echo `basename $file` `ls -lrt $file | tr -s " " | cut -d" " -f6-8` `dirname $file` `ls -lrt $file | tr -s " " | cut -d" " -f-5`; done

如果有人可以改进它,那就太好了,但这有效...

有帮助吗?

解决方案

你有没有尝试过 find ./delete -type f -ls (注意 -ls - 那是钥匙:-))?然后,您应该能够通过 awk 滤除所需的字段。

编辑...您可以做的另一种方法是段循环,例如:

find ./delete -type f -ls | while read f1 blocks perms blocks owner group size mon day third file
do
    echo `basename $file` `dirname $file`
done

并添加您需要的位。

其他提示

您还可以使用查找的-printf功能来显示所需文件的正确属性:

find {DIRECTORY_NAME_HERE} -type f -printf  '%f %Tb %Td %TH:%TM %h %s\n'

我得到这样的结果:

config Nov 10 10:02 /etc/w3m 1185
mailcap Nov 10 10:02 /etc/w3m 44
hosts.allow Apr 29 05:25 /etc 580
rsyslog.conf Feb 24 10:26 /etc 1217
user-dirs.conf Apr 16 15:03 /etc/xdg 414
user-dirs.defaults Apr 16 15:03 /etc/xdg 418

我将使用Perl执行此任务:

#!/opt/local/bin/perl -w

use File::Find;
use POSIX qw(strftime);

find(\&wanted, ($DIRECTORY_NAME_HERE));
sub wanted {
  ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime) = stat;
  printf("%s %s %s %d\n", $_, 
    strftime("%b %e %H:%M %Y", localtime($mtime)),
    $File::Find::dir,
    $size);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top