[英]how do I loop through the results of this FIND command in my Linux shell script?
我编写了以下命令,以按文件大小的顺序列出“〜”中及其以下的所有文件。 似乎工作正常:
find ~ -printf "%k KB %p\n" | sort -nr
现在,我想把它放在一个shell脚本中,并循环遍历结果以进行更多处理。
我用一个简单的“ ls”命令来工作:
dir="/home/myusername"
cmd='ls'
for i in `$cmd`
do
echo $i
done
但这不起作用:
dir="/home/myusername"
cmd='find $dir -printf "%k KB %p\n" | sort -nr'
for i in `$cmd`
do
echo $i
done
我也尝试过在双引号前使用转义字符,但这也不起作用...
dir="/home/myusername"
cmd='find $dir -printf \"%k KB %p\n\" | sort -nr'
for i in `$cmd`
do
echo $i
done
有什么想法我做错了吗?
要执行简单的命令,可以将find
的结果xargs
给xargs
:
find ~ -printf "%k KB %p\n" | sort -nr | xargs -l -i echo '{}'
-l
:使xargs
处理一行。
-i
:用管道输出替换{}
每次出现。
尝试在BASH中使用find进行while循环:
while read -r f; do
echo "$f"
done < <(find "$dir" -printf "%k KB %p\n" | sort -nr)
这应该可以工作(有关为什么不使用原始语法的说明,请参见https://stackoverflow.com/a/11366230/3076724 )
find "$dir" -printf "%k KB %p\n" | sort -nr | while read -r i; do
echo "$i"
done
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.