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

时间:2014-01-27 00:32:54

标签: linux bash shell unix

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

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

任何想法我做错了什么?

3 个答案:

答案 0 :(得分:3)

要执行简单命令,您可以将find的结果导入xargs

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

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

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

答案 1 :(得分:2)

尝试使用BASH中的find循环:

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

答案 2 :(得分:0)

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

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