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

Kev*_*vin 2 size bash filenames find duplicates

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

find . -exec basename {} \;
Run Code Online (Sandbox Code Playgroud)

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

find . -exec ls -l {} \; | awk '{print $5}'
Run Code Online (Sandbox Code Playgroud)

但我需要获取用空格分隔的基本名称和文件大小。

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

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

awk: can't open file ;find: 
 source line number 1
-exec: no terminating ";" or "+"
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个快速的重复文件查找器。使用这个列表,我会进行排序,然后使用 uniq 来查找所有重复的文件,使用条件:重复 = 相同的“基本名称”和相同的“大小”(没有 md5 检查)。

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

anu*_*ava 5

GNU系统

对于 GNU 系统,使用此命令

find . -printf '%k\t%f\n'
Run Code Online (Sandbox Code Playgroud)

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

  • %k打印文件大小(以 kb 为单位)
  • \t文字制表符
  • %f打印删除前导目录路径的文件名
  • \n文字换行符

操作系统X

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

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