在工作中,我需要将图像上传到网站。它们不能超过300 KB。为了对准备上传的图像进行分组,我在Bash中设计了以下一行:
du -h * | grep "[0-2]..K" | awk '{print $2}' | xargs mv Ready/
但这不起作用,因为shell返回了以下内容:
usage: mv [-f | -i | -n] [-v] source target
mv [-f | -i | -n] [-v] source ... directory
最后,我使用for循环来完成相同的操作:
for file in $(du -h * | grep "[0-2]..K" | awk '{print $2}')
do
mv -v ${file} Ready/
done
有人可以解释为什么第一行不起作用?这可能是我很遗憾的事情,但我似乎无法找到它。
我使用的是Mac OS X 10.7,Bash 4.3版。
答案 0 :(得分:3)
我会使用find
命令来获取小于特定大小的所有文件,使代码更清晰,更易于阅读:
find . -size -300k -name *.png -exec mv {} Ready/ \;
第一个命令失败的原因是因为你必须引用你输入的值,因为它不在语句的末尾。这应该有效:
du -h * | grep "[0-2]..K" | awk '{print $2}' | xargs -0 -I {} mv {} Ready/