我正在尝试编写一个脚本(或单行)来查找所有尺寸较小的图像文件,然后将它们移动到一个目录中。基于这个答案来自 Ask Ubuntu,我能够生成两个维度都低于 500 的文件列表,然后我能够找到所有常见的图像文件以及.jpg
。
find -E . -regex ".*\.(jpg|gif|png|jpeg)" -type f -exec identify -format '%w %h %i\n' '{}' \; | awk '$1<500 && $2<500' | awk '{print $3}'
第二个awk
是它只打印文件名,我希望在mv
. 我怎样才能将该输出放入mv
?
第一个的示例输出awk
是:
123 456 ./smallimage.jpg
333 333 ./square.png
第二个awk
刚刚给出
./smallimage.jpg
./square.png
但是,我似乎找不到一种方法来获取此文件名列表作为mv
命令的输入,因为所需的最终命令是某种形式mv <file list> ./small_images/
答案1
合并mv
到awk
使用system()
函数中:
awk '$1<500 && $2<500 {system("mv "$3" /destination")}
更改mv
命令以满足您的需要,这里我使用了:
mv /file_(third_field)_from_awk /destination
另外,您不需要多个awk
s,只需一个就足够了,如上所示。
答案2
假设您的文件名没有嵌入换行符,您可以使用 GNUmv
和xargs
程序来执行此操作。
... | awk ... | xargs -d'\n' mv -t ./small_images
xargs 从输入中收集文件名并将其附加到命令中mv -t ./small_images
,根据需要分割很长的命令。您需要一个mv
可以-t
在命令开始时指定目标目录的版本,或者编写一个小脚本来处理它。