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