复制具有多个扩展名的文件

And*_*rew 34 shell bash cp wildcards

我想将具有多个扩展名的文件复制到一个目标目录。

例如,我可以使用以下命令将工作目录中的所有.txt文件复制到名为 的目录destination

cp -v *.txt destination/
Run Code Online (Sandbox Code Playgroud)

我可以使用以下内容将工作目录中的所有.png目录复制到destination

cp -v *.png destination/
Run Code Online (Sandbox Code Playgroud)

但是将它们作为单独的命令键入很耗时(即使使用命令历史记录)。那么,有什么方法可以告诉我cp将带有模式*.txt 模式的文件复制*.pngdestination 理想情况下,我希望能够指定两个以上的模式——例如,指示cp将所有*.txt *.png *.jpg文件复制到destination

我确信所有这些都可以使用 shell 脚本实现——bash例如,我正在使用——但是有没有什么方法可以更简单地完成它,仅从控制台?我可以以某种方式使用大括号扩展来做到这一点吗?

我知道这是可能的所有文件复制除了匹配某些特定模式的工作目录,但由于我的工作目录含有更多的文件扩展名,我希望比我复制这样做,那将是一个痛苦。

你对此有什么想法吗?

Tim*_*tin 79

支撑扩展将完成工作。 man bash并搜索Brace Expansion.

cp *.{txt,jpg,png} destination/
Run Code Online (Sandbox Code Playgroud)

编辑:

根据 OP 的要求,上面的命令缺少详细选项:

cp -v *.{txt,jpg,png} destination/
Run Code Online (Sandbox Code Playgroud)

  • 我可以在 Windows 上执行此操作吗? (2认同)
  • 如果我执行 `cp data/images/*.{jpg,jpeg,png,mp4} destination/` 并且 `mp4` 文件不存在,我会收到一个 `No such file or directory` 错误,这会破坏脚本。我可以让多个扩展优雅地处理任何丢失的格式吗? (2认同)