检查给定类型的文件是否存在于 bash shell

Check if files of a given type exist in bash shell

我想在我的 Mac 中使用 Automator 和 shell 来整理我的文件。我试着写一些这样的命令:

mv -f /Users/myname/Downloads/*.zip /Users/myname/Downloads/zip/
mv -f /Users/myname/Downloads/*.txt /Users/myname/Downloads/txt/

他们成功了。但是我发现如果没有文件匹配,'mv'会return错误,所以我想做这样的事情。

if (txt file) , mv *.txt /txt/
if (zip file) , mv *.txt /zip/

我发现if语句正在使用

[ -f "   "]

然后我写了这样的东西

[ -f "/Users/myname/Downloads/*.zip" ] && mv -f /Users/myname/Downloads/*.zip /Users/myname/Downloads/zip/ || echo 'Nothing'

但它 returns "Nothing" 即使文件存在。

我该如何解决这个问题?或者我不应该使用 shell 命令来执行此操作? 有什么建议吗?

使用 find 怎么样?像这样:

如果可以使用mv -t

find /Users/myname/Downloads/ -maxdepth 1 -name "*.zip" -print0 | xargs -0 mv -f -t /Users/myname/Downloads/zip/

如果你不走运(或使用-exec,正如几条评论中指出的那样):

find /Users/myname/Downloads/ -maxdepth 1 -name "*.zip" -print0 | xargs -I {} -0 mv -f {} /Users/myname/Downloads/zip/

编辑 添加了 -print0 以使解决方案白色 space 安全。

EDIT2 使用 mv -t 而不是 {}