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

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

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

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

cp -v *.txt destination/

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

cp -v *.png destination/

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

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

我知道有可能复制工作目录中的所有文件,除了那些匹配某些指定模式的文件,但由于我的工作目录包含更多的文件扩展名,所以我比我更想复制的,那会很痛苦。

您对此有什么想法吗?

答案1

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

cp *.{txt,jpg,png} destination/

编辑:

为了与OP的请求保持一致,上面的命令缺少详细选项:

cp -v *.{txt,jpg,png} destination/

答案2

for filename in /Photos/directory/* ; do
    filenameWithoutPath="${filename##*/}"
    first_num="${filenameWithoutPath%%.*}"
    last_num="${filenameWithoutPath##*.}"
    cp $filename /Photos/directory/$first_num-$last_num.jpg
done

就这样工作了!

相关内容