Ubuntu下批量迁移子目录中PDF文件至指定目录的方法
批量迁移子目录中的PDF文件到指定位置
以下是几种高效的命令行方案,适配你的Ubuntu环境:
方法1:find + cp 直接提取所有PDF
这是最直观的方式,直接遍历所有子目录并复制PDF文件到目标位置:
find . -type f -name "*.pdf" -exec cp {} /path/to/your/target/directory \;
- 参数说明:
.:从当前工作目录开始遍历-type f:只匹配文件(排除目录)-name "*.pdf":筛选所有后缀为PDF的文件-exec cp {} ...:对每个找到的文件执行复制操作,{}代表当前匹配到的文件
如果担心重名文件被覆盖,可以加上-n参数(不覆盖已有文件)或-b参数(自动备份重名文件):
# 不覆盖已有文件 find . -type f -name "*.pdf" -exec cp -n {} /path/to/your/target/directory \; # 备份重名文件(会在文件名后加~后缀) find . -type f -name "*.pdf" -exec cp -b {} /path/to/your/target/directory \;
方法2:用rsync精准过滤PDF(适配你熟悉的工具)
如果你习惯用rsync,可以通过过滤规则只传输PDF文件,还能保留原目录结构(可选):
rsync -avm --include='*.pdf' --include='*/' --exclude='*' . /path/to/your/target/directory
- 参数说明:
-a:归档模式,保留文件权限、时间戳等元信息-v:显示传输过程(可选,方便查看进度)-m:不传输空目录(避免目标目录出现大量空文件夹)--include='*.pdf':优先包含PDF文件--include='*/':必须包含所有子目录,否则rsync会跳过子目录无法找到里面的PDF--exclude='*':排除所有未被前面规则匹配的内容
如果不需要保留原目录结构,只想把所有PDF放到目标目录的根下,可以改用find+cp的方式,或者结合rsync的--flatten参数(部分rsync版本支持):
rsync -avm --include='*.pdf' --include='*/' --exclude='*' --flatten . /path/to/your/target/directory
方法3:处理重复文件的进阶方案
如果有大量重名PDF,想要避免覆盖同时区分文件,可以给每个文件加上原目录的前缀,用find结合自定义脚本实现:
find . -type f -name "*.pdf" | while read -r file; do # 提取相对路径并替换为下划线,作为文件名前缀 prefix=$(dirname "$file" | tr '/' '_') cp "$file" "/path/to/your/target/directory/${prefix}_$(basename "$file")" done
这样原目录./docs/report.pdf会被复制为docs_report.pdf,彻底避免重名冲突。
内容的提问来源于stack exchange,提问作者Dilna
相关产品推荐
相关产品推荐

