查找返回基本名称和大小的文件

时间:2016-08-03 22:49:26

标签: bash find duplicates size filenames

在bash中,我可以获取找到的文件的基本名称(无路径名称),如下所示:

find . -exec basename {} \;

我可以得到这样的文件大小:

find . -exec ls -l {} \; | awk '{print $5}'

但是我需要用空格分隔basename和filesize。

如何使用一个查找操作正确组合这两个命令? 此代码不起作用:

find . -exec basename {} \; -exec ls -l {} | awk '{print $5}' \;

awk: can't open file ;find: 
 source line number 1
-exec: no terminating ";" or "+"

我正在尝试创建一个快速重复的文件查找器。使用此列表,我会进行排序,然后使用uniq查找使用条件重复的所有文件:a duplicate = same" basename" &安培;相同"尺寸" (没有md5检查)。

到目前为止,只是创建这个初始列表是我在语法上(也许是以编程方式)挂起的地方。如果你有更好的方法,请告诉我。它试图使用最基本的bash命令使其工作,因此它可以在linux和mac上运行而无需安装任何东西。

1 个答案:

答案 0 :(得分:3)

GNU系统

对于GNU系统,请使用此命令

find . -printf '%k\t%f\n'

获取每个文件和基本名称的输出。

  • %k以kb
  • 打印文件大小
  • \t文字标签字符
  • %f打印文件名,删除了前导目录路径
  • \n文字换行符

OSX

对于OSX,请使用此命令,因为它本身不直接支持-printf参数。

find . -exec bash -c 'printf "%s\t%s\n" $(stat -f " %z" "$1") "$(basename "$1")"' - {} \;