繁体   English   中英

Bash:用grep,awk和xargs移动一组特定大小的文件

[英]Bash: moving a group of files of a certain size with grep, awk and xargs

在工作中,我需要将图像上传到网站。 它们不能超过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版。

我会使用find命令来获取小于特定大小的所有文件,使代码更清晰,更容易阅读,如下所示:

find . -size -300k -name *.png -exec mv {} Ready/ \;

第一个命令失败的原因是因为它必须引用您输入的值,因为它不在语句的末尾。 这应该工作:

du -h * | grep "[0-2]..K" | awk '{print $2}' | xargs -0 -I {} mv {} Ready/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM