在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上运行而无需安装任何东西。
答案 0 :(得分:3)
对于GNU系统,请使用此命令
find . -printf '%k\t%f\n'
获取每个文件和基本名称的输出。
%k
以kb \t
文字标签字符%f
打印文件名,删除了前导目录路径\n
文字换行符对于OSX,请使用此命令,因为它本身不直接支持-printf
参数。
find . -exec bash -c 'printf "%s\t%s\n" $(stat -f " %z" "$1") "$(basename "$1")"' - {} \;