Bash 查找返回basename和size的文件

Bash 查找返回basename和size的文件,bash,find,duplicates,size,filenames,Bash,Find,Duplicates,Size,Filenames,在bash中,我可以获得找到的文件的basename(没有路径的名称),如下所示: find . -exec basename {} \; find . -exec ls -l {} \; | awk '{print $5}' 我可以得到这样的文件大小: find . -exec basename {} \; find . -exec ls -l {} \; | awk '{print $5}' 但是我需要用空格分隔basename和filesize 如何使用一个查找操作正确组合这两个命

在bash中,我可以获得找到的文件的basename(没有路径的名称),如下所示:

find . -exec basename {} \;
find . -exec ls -l {} \; | awk '{print $5}'
我可以得到这样的文件大小:

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查找所有重复的文件,使用以下条件:重复=相同的“basename”和相同的“size”(无md5检查)

到目前为止,仅仅列出这个初始列表是我在语法上(可能是编程上)遇到的问题。如果你有更好的方法,请告诉我。它正在尝试使用最基本的bash命令使其工作,这样它就可以在linux和mac上工作,而无需安装任何东西。

GNU系统 对于GNU系统,使用以下命令

find . -printf '%k\t%f\n'
获取每个文件的大小和basename的输出

  • %k
    以kb为单位打印文件大小
  • \t
    文字制表符
  • %f
    打印删除前导目录路径的文件名
  • \n
    文字换行符
OSX 对于OSX,请使用此命令,因为它本机不直接支持
-printf
参数

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

感谢您的回复,但是OSX不使用GNU实用程序,所以它不适用于这个跨平台脚本。find命令仅限于FreeBSD使用的find版本中可用的内容。这里的更多信息:为了回答您关于osx版本的问题,我必须将其作为一个实用程序部署到创建摄像机镜头驱动器的人身上,他们都使用各种版本的osx,因此它也必须相当独立于此。他们的想法是,在不安装任何其他东西的情况下,他们可以在驱动器的根目录下运行一个小型bash程序,该程序将快速解析驱动器上的所有文件,并告诉他们是否存在文件名大小的重复。如果有这些类型的复制品,他们会把创建镜头驱动器搞砸(每个相机主机都应该是唯一的)。