我想将具有多个扩展名的文件复制到单个目标目录。
例如,我可以使用以下命令来复制所有。TXT将工作目录中的文件复制到名为的目录中destination
:
cp -v *.txt destination/
我可以使用以下内容复制所有内容.png工作目录中的目录destination
:
cp -v *.png destination/
但是将这些命令作为单独的命令输入非常耗时(即使使用命令历史记录)。那么,有什么方法可以告诉我cp
使用以下模式复制文件*.txt
或者模式*.png
到destination
? 理想情况下,我希望能够指定两个以上的模式——比如指示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
就这样工作了!