如何在 shell 中将不同类型的文件移动到不同的目录

如何在 shell 中将不同类型的文件移动到不同的目录

我的文件夹中混合了不同的文件,我想我可以简单地执行以下操作:

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 一些秘密的超能力,但要始终记住使用这些能力来帮助人类,而不要用于邪恶。

相关内容