我的文件夹中混合了不同的文件,我想我可以简单地执行以下操作:
mv '*.(png|jpg|gif)' images/
将它们移动到图像文件夹。但是它不起作用...有什么想法吗?
答案1
使用 bash 中的一个功能括号扩展
mv *.{png,gif,jpg} images
答案2
mv *.png *.jpg *.gif images/
应该这样做
答案3
你使用的是什么 shell?
戈许有正确答案。如果你能用更简单易懂的方式来做,就没理由去做更深奥的事情了。
最后,shell 会在将列表传递给命令之前扩展命令以包含所有文件mv
,因此以不同的方式执行操作实际上不会带来性能上的提升或损失。
然而,如果你想花花公子先生,您应该知道 Bash 和 Kornshell(均在 OS X 上可用)都可以使用扩展的 glob 表达式执行以下操作:
$ mv *(*.png|*.jpg|*.gif) images
当你想从目录中删除除一个文件之外的所有内容时,扩展的 glob 表达式(又称模式匹配)非常有用。例如,你展开了一个 tar 存档,并想删除除 tar 存档之外的所有文件:
$ rm -rf !(foo.tar.gz)
Bash 的问题在于你必须通过购物首先命令:
$ shopt -s extglob
查看 Bash 手册页并查看模式匹配。它包含许多巧妙的 shell 技巧,但很少有人知道。它赋予你的 shell 一些秘密的超能力,但要始终记住使用这些能力来帮助人类,而不要用于邪恶。