如何用Bash将同名文件复制到指定目录并设置唯一文件名
批量复制并重命名指定文件的解决方案
需求说明
现有目录结构:
├── Directory 1
│ ├── img.png
├── Directory 2
│ ├── imgx.png
├── Directory 3
│ ├── img.png
...
...
├── Directory n
│ ├── img.png
├── Images
需完成两个操作:
- 查找所有
Directory X子目录中的img.png文件(部分目录可能不含该文件) - 将找到的文件复制到
Images目录,并重命名为X_img.png(X为目录的数字编号,例如来自Directory 2的文件命名为2_img.png)
Linux/macOS 命令行实现
在包含所有Directory X和Images的根目录下,执行以下命令:
find . -type f -path "./Directory */img.png" | while read file; do dir_num=$(echo "$file" | grep -oP 'Directory \K\d+') cp "$file" "./Images/${dir_num}_img.png" done
find . -type f -path "./Directory */img.png":递归匹配所有Directory X下的img.png文件grep -oP 'Directory \K\d+':从路径中提取目录的数字编号cp命令完成复制并重命名
Windows PowerShell 实现
切换到根目录后,执行以下脚本:
Get-ChildItem -Recurse -Filter "img.png" | Where-Object { $_.DirectoryName -match 'Directory \d+' } | ForEach-Object { $dirNum = [regex]::Match($_.DirectoryName, 'Directory (\d+)').Groups[1].Value Copy-Item $_.FullName -Destination ".\Images\${dirNum}_img.png" }
Get-ChildItem -Recurse -Filter "img.png":递归查找所有img.png文件Where-Object筛选出父目录为Directory X的目标文件- 正则提取目录编号后,通过
Copy-Item完成复制重命名
内容的提问来源于stack exchange,提问作者VBtheFirbolg
相关产品推荐
相关产品推荐

