我试图找到一种方法将显示的结果与find
命令结合起来,例如:
$find /home -name "requirements_*"
/home/cobayo/Obligatorio Test 2/requirements_richard
/home/cobayo/Obligatorio Test 2/requirements_paul
/home/cobayo/Obligatorio Test 2/requirements_george
/home/cobayo/Obligatorio Test 1/Subdirectorio/requirements_joe
所以在这里我得到了我正在寻找的文件的所有路径,我想要做的是在路径之前列出文件大小。 例如:
34K "/home/cobayo/Obligatorio Test 2/requirements_richard"
我有一些命令,即使是一个小脚本也会显示文件大小。
例如,这一个:
find /home -name "requirements_*" -mtime -1 -print0 | du --files0-from=- -hc |
tail -n1*
它显示所有文件的TOTAL大小,其名称作为结果作为参数。
但是,我也有这个小脚本:
FILENAME=$1
FILESIZE=$(stat -c%s "$FILENAME")
echo "Size of $FILENAME = $FILESIZE bytes."
当我在特定文件的K中获取文件时,这是完美的。我尝试使用列表混合它们:
*for i in `find /home -name "requirements_*"`
do
echo `stat -c%s $i`
done*
但是我没有得到我想要的结果,事实上它告诉我文件不存在:(
答案 0 :(得分:0)
您可以使用-exec du -hs {} \;
:
$ find -type f -exec du -hs {} \;
4.0K ./proj-2/README.md
4.0K ./proj-2/file.c
4.0K ./proj-2/file.h
或者,如果您的find
支持它:
find -type f -exec du -hs {} +
只调用一次du
。
或-printf
,其中%k
格式参数的大小为kB:
$ find -type f -printf '%kK\t%p\n'
4K ./proj-2/README.md
4K ./proj-2/file.c
4K ./proj-2/file.h
手动参考:
答案 1 :(得分:0)
如果未将变量$i
放在double quotes
之间,则空格将被解释为分隔符,并且您的命令将尝试独立评估以下文件:
/home/cobayo/Obligatorio
Test
1/Subdirectorio/requirements_joe
/home/cobayo/Obligatorio
Test
2/requirements_richard
/home/cobayo/Obligatorio
Test
2/requirements_paul
/home/cobayo/Obligatorio
Test
2/requirements_george
是什么让你错误:文件不存在
您可以尝试:
find . -name "requirements_*" -print0 | xargs -0 -I {} bash -c "echo -n 'Size of {} = ' && stat -c%s '{}' | tr -d '\n' && echo ' bytes.'"