我列出了我电脑中的所有文件。
FILES=$(find . -type f -name '*' -printf "%s/%f\n" | sort -n)
输出应该是:
"size/file_name"
56872/file.txt
98566/test
1000254/foo
我的电脑给我错误
find: -printf: unknown primary or operator
有什么解决办法吗?
答案1
答案2
find
和xargs
GNU stat
:
find . -type f -print0 | xargs -0r stat -c '%s/%n'
对于这个特定的问题,实际上并不需要这个 GNU 版本,因为 GNU无论如何都find
支持printf
(但它在其他上下文中可能很有用,因为有些东西stat
可以找到有关find ... -printf
无法显示的文件的信息)。
然而,FreeBSD 和 Mac OS X 则是另一回事。
find
以及xargs
FreeBSD(和 Mac OS X)stat
:
find . -type f -print0 | xargs -0r stat -f '%z/%N'
可以选择通过管道传输输出sed -e 's:/./:/:'
以删除./
每个文件名开头的 。
示例输出,来自我的 FreeBSD 测试虚拟机:
# find . -type f -print0 | xargs -0r stat -f '%z/%N' | sed -e 's:/./:/:' | head
149/.k5login
254/.profile
1169/.cshrc
297/.login
5589/.history
171/.ssh/known_hosts
1803/.ssh/authorized_keys
6699/.bash_history
368/.bashrc
4065/.viminfo