使用路径

时间:2017-11-17 03:25:02

标签: linux bash unix

我试图找到一种方法将显示的结果与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*

但是我没有得到我想要的结果,事实上它告诉我文件不存在:(

2 个答案:

答案 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.'"

enter image description here