Bash:将所有扩展名相同的文件复制到根/当前文件夹中,但文件名包含某些字符串的文件除外

问题描述 投票:1回答:1

我构建了一个脚本,用于仅在一个cp命令行中复制多个与文件类型匹配的文件夹和文件,如下所示:

today=$(date +"%d-%m-%Y");
cp -r ./{dir1,dir2,dir3,..,fi.le1.ext1,*.ext2,*.ext3} "../Target_$today/Subdir_$today/"

现在,我要复制“ .ext3”的所有文件,但保留名称中包含“ lock”或“ -lock”的文件。因为那些文件是自动生成的,所以不需要备份它们(例如package-lock.json)。

我如何在之间不添加任何find语句,而仅使用通配符和否定运算符来做到这一点?

bash shell wildcard git-bash cp
1个回答
4
投票

使用扩展的glob:

shopt -s extglob nullglob

cp -r ./{dir1,dir2,dir3,..,fi.le1.ext1,!(*lock).ext2,*.ext3} "../Target_$today/Subdir_$today/"
© www.soinside.com 2019 - 2024. All rights reserved.