我编写了以下命令,按文件大小顺序列出'〜'内和下方的所有文件。它似乎工作正常:
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
任何想法我做错了什么?
答案 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