查找返回基本名称和大小的文件
find files returning basename and size
在 bash 中,我可以像这样获取找到的文件的基本名称(没有路径的名称):
find . -exec basename {} \;
我可以得到这样的文件大小:
find . -exec ls -l {} \; | awk '{print }'
但我需要获取由 space 分隔的基本名称和文件大小。
如何使用一次查找操作正确组合这两个命令?
此代码不起作用:
find . -exec basename {} \; -exec ls -l {} | awk '{print }' \;
awk: can't open file ;find:
source line number 1
-exec: no terminating ";" or "+"
我正在尝试创建一个快速的重复文件查找器。使用此列表,我将进行排序,然后使用 uniq 使用以下条件查找所有重复的文件:a duplicate = same "basename" & same "size"(没有 md5 检查)。
到目前为止,只是制作这个初始列表是我在语法上(也许在编程上)挂断的地方。如果您有更好的方法,请告诉我。它试图使用最基本的 bash 命令使其工作,因此它可以在 linux 和 mac 上工作而无需安装任何东西。
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" "") "$(basename "")"' - {} \;
在 bash 中,我可以像这样获取找到的文件的基本名称(没有路径的名称):
find . -exec basename {} \;
我可以得到这样的文件大小:
find . -exec ls -l {} \; | awk '{print }'
但我需要获取由 space 分隔的基本名称和文件大小。
如何使用一次查找操作正确组合这两个命令? 此代码不起作用:
find . -exec basename {} \; -exec ls -l {} | awk '{print }' \;
awk: can't open file ;find:
source line number 1
-exec: no terminating ";" or "+"
我正在尝试创建一个快速的重复文件查找器。使用此列表,我将进行排序,然后使用 uniq 使用以下条件查找所有重复的文件:a duplicate = same "basename" & same "size"(没有 md5 检查)。
到目前为止,只是制作这个初始列表是我在语法上(也许在编程上)挂断的地方。如果您有更好的方法,请告诉我。它试图使用最基本的 bash 命令使其工作,因此它可以在 linux 和 mac 上工作而无需安装任何东西。
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" "") "$(basename "")"' - {} \;