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

时间:2018-02-18 16:48:06

标签: bash shell unix automator

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

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

他们工作了。但我发现' mv'如果没有文件匹配将返回错误,所以我想做这样的事情。

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'

但它返回"没有"甚至文件都存在。

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

1 个答案:

答案 0 :(得分:1)

如何使用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以使解决方案空白区域安全。

EDIT2 使用mv -t代替{}