如何将父目录嵌套子目录中的JPEG文件复制到新目录?
嘿,这个需求太常见了!我给你几个靠谱的方案,不管你用 Linux/macOS/WSL 还是 Windows 都能搞定:
方法1:用
find 命令(Linux/macOS/WSL 通用) 这是最经典的处理嵌套文件的方式,灵活又好用。
首先确保目标目录 NEW 存在,不存在的话先创建:
mkdir -p ./NEW
然后执行复制命令:
find ./Parent -type f -iname "*.jpeg" -exec cp {} ./NEW/ \;
我给你拆解下参数:
./Parent:指定要搜索的父目录-type f:只找文件(排除目录)-iname "*.jpeg":忽略大小写匹配所有.jpeg文件(如果要同时匹配.jpg,可以改成-iname "*.jp*g")-exec cp {} ./NEW/ \;:对每个找到的文件执行cp命令,{}代表当前找到的文件路径,\;是命令结束标记
如果担心重名文件被覆盖,可以加上 -n 参数(不覆盖已存在的文件):
find ./Parent -type f -iname "*.jpeg" -exec cp -n {} ./NEW/ \;
或者用 -b 参数自动备份重名文件:
find ./Parent -type f -iname "*.jpeg" -exec cp -b {} ./NEW/ \;
方法2:用
rsync 命令(更高效,适合大量文件) 如果嵌套目录里文件特别多,rsync 会比 find+cp 更高效,而且它会自动跳过已存在且内容相同的文件。
同样先确保 NEW 目录存在,然后执行:
rsync -r --include="*.jpeg" --include="*/" --exclude="*" ./Parent/ ./NEW/
参数解释:
-r:递归遍历目录--include="*.jpeg":包含所有.jpeg文件--include="*/":必须先包含所有子目录,不然rsync没法深入嵌套目录查找文件--exclude="*":排除所有其他文件和目录
方法3:Windows 系统专用(CMD/PowerShell)
如果你用的是 Windows 原生终端,也有对应的方法:
CMD 命令
先创建目标目录(如果不存在):
md NEW
然后执行复制:
for /r "Parent" %f in (*.jpeg) do copy "%f" "NEW\"
注意:如果是在批处理脚本里写,要把 %f 改成 %%f
PowerShell 命令
先创建目录:
New-Item -ItemType Directory -Path .\NEW -Force
然后复制:
Get-ChildItem -Path .\Parent -Recurse -Filter *.jpeg | Copy-Item -Destination .\NEW
要是想忽略大小写匹配,可以加上 -File -Name 参数配合通配符:
Get-ChildItem -Path .\Parent -Recurse -File | Where-Object {$_.Name -match '\.jpe?g$'} | Copy-Item -Destination .\NEW
内容的提问来源于stack exchange,提问作者Mehdi
相关产品推荐
相关产品推荐

