繁体   English   中英

如何在Linux Shell脚本中遍历此FIND命令的结果?

[英]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的结果xargsxargs

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM