如何在我的 Linux shell 脚本中循环浏览此 FIND 命令的结果?



我编写了以下命令,按文件大小顺序列出"~"中和下方的所有文件。 它似乎工作正常:

find ~ -printf "%k KB %pn" | 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 %pn" | sort -nr'
for i in `$cmd`
do
echo $i
done

我也尝试在双引号前使用转义字符,但这也没有用......

dir="/home/myusername"
cmd='find $dir -printf "%k KB %pn" | sort -nr'
for i in `$cmd`
do
echo $i
done

知道我做错了什么吗?

在 bash 中使用 find 循环试试这个:

while read -r f; do
echo "$f"
done < <(find "$dir" -printf "%k KB %pn" | sort -nr)

要执行简单的命令,您可以将find的结果通过管道传递到xargs

find ~ -printf "%k KB %pn" | sort -nr | xargs -l -i echo '{}'

-l:使xargs一次处理一行。

-i:将每次出现的{}替换为管道的输出。

这应该有效(有关为什么不使用原始语法的说明,请参阅 https://stackoverflow.com/a/11366230/3076724)

find "$dir" -printf "%k KB %pn" | sort -nr |  while read -r i; do
echo "$i"
done

相关内容

  • 没有找到相关文章

最新更新