如何批量复制多目录指定文件并重命名?排除含_old的目录
正确复制并重命名list.txt文件的命令(排除含_old的目录)
你的原cp命令失效的原因是:在源和目标路径同时使用大括号扩展时,会生成所有可能的源-目标组合,这并不是你需要的一对一复制逻辑。要实现每个文件复制到自身路径并添加_backup后缀,需要逐个处理每个文件。
方法1:Bash循环结合通配符
利用你已经验证有效的通配符匹配,通过循环逐个处理文件:
for file in /data/*/{subfolder,anothername}/{user,other}/list.txt; do [ -f "$file" ] && cp "$file" "${file}_backup" done
[ -f "$file" ]:检查文件是否存在,避免通配符无匹配时的错误${file}_backup:自动在原文件名后追加_backup后缀,保持文件在原目录下
方法2:使用find命令(更灵活)
如果需要更精确的路径过滤,可结合find命令直接定位目标文件并执行复制:
find /data -type f -name "list.txt" \( -path "*/subfolder/user/*" -o -path "*/anothername/other/*" \) ! -path "*_old*" -exec cp {} {}_backup \;
-type f:仅匹配文件(排除目录)-name "list.txt":精准定位目标文件名\( -path ... -o -path ... \):匹配指定的子路径结构! -path "*_old*":排除所有包含_old的路径-exec cp {} {}_backup \;:对每个找到的文件执行复制操作,{}代表当前文件路径
内容的提问来源于stack exchange,提问作者ng-User
相关产品推荐
相关产品推荐

