【发布时间】:2014-02-17 17:22:22
【问题描述】:
我编写了以下命令,按文件大小的顺序列出“~”内及以下的所有文件。它似乎工作正常:
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
任何想法我做错了什么?
【问题讨论】:
-
@BroSlow 嗨——感谢您的帮助,但这是我的问题中的一个错字——我将“~”更改为“$dir”——谢谢
-
没问题,另请参阅stackoverflow.com/a/11366230/3076724 以修复您的
find语法,否则它将在空格/奇怪字符上中断。 -
@thatotherguy 谢谢,但我不认为这是同一个问题。我只是想运行公认的棘手命令,而转义字符不起作用
-
@RobertHume 转义字符不起作用,因为您的方法存在根本缺陷。要遍历结果,请使用链接问题的方法(和
sort -z进行排序)。