如何从嵌套目录的每个子目录中随机复制一个.jpg文件?
从嵌套目录的每个子文件夹提取单个JPG文件的方法
Windows 平台
命令提示符(CMD)方案
直接在CMD里执行以下命令,记得替换实际路径:
for /r "你的根目录路径" %d in (.) do @for /f "delims=" %f in ('dir /b /a-d "%d\*.jpg" ^| findstr /n "^" ^| findstr "^1:" ^| delims=:') do @copy "%d\%f" "目标文件夹路径\"
for /r递归遍历指定根目录下的所有子文件夹- 内层命令筛选出每个文件夹里的第一个JPG文件,自动复制到目标目录
PowerShell 方案
PowerShell写法更直观,复制脚本执行即可:
Get-ChildItem -Path "你的根目录路径" -Filter *.jpg -Recurse | Group-Object DirectoryName | ForEach-Object { $_.Group[0] | Copy-Item -Destination "目标文件夹路径" }
- 先递归抓取所有JPG文件,再按文件夹分组;每组取第一个文件复制到目标位置,要是想取最后一个,把
$_.Group[0]改成$_.Group[-1]就行
Linux/macOS 平台
基础bash脚本
find "你的根目录路径" -type f -name "*.jpg" | while read file; do dir=$(dirname "$file") # 用临时文件标记目录已提取,避免重复复制 if [ ! -f "/tmp/extracted_$dir.tmp" ]; then cp "$file" "目标文件夹路径/" touch "/tmp/extracted_$dir.tmp" fi done
执行完毕后可以删除/tmp下的临时文件,释放空间。
高效awk写法
如果文件夹数量极多,这个方法速度更快:
find "你的根目录路径" -type f -name "*.jpg" | awk -F/ '{print dirname=substr($0,1,length($0)-length($NF)), $0}' | sort -k1,1 | awk '!seen[$1]++ {print $2}' | xargs -I {} cp {} "目标文件夹路径/"
- 先通过
find定位所有JPG文件,再按目录分组筛选出每个目录的第一个文件,最后批量复制到目标位置
注意事项
- 所有命令中的路径要替换成你实际的根目录和目标目录
- 如果目标目录存在重名文件,会直接被覆盖,建议提前备份,或者给复制的文件加原目录名前缀(比如PowerShell里可修改为
Copy-Item -Destination "目标文件夹路径/$($_.Group.Directory.Name)_$($_.Group.Name)")
内容的提问来源于stack exchange,提问作者Linda Black
相关产品推荐
相关产品推荐

