Mac下如何根据文件前三个字符将PDF文件移动到对应文件夹
解决PDF按编号匹配移动到对应目标文件夹的问题
看起来你之前尝试的脚本要么逻辑不对(比如之前的终端脚本会新建编号文件夹,而不是找已有的logos里的文件夹),要么没处理好跨目录的路径问题。下面给你两个可靠的解决方案,分别用Bash脚本和现代AppleScript实现,都能处理PDF和目标文件夹不在同一目录的情况。
方案一:Bash脚本(适合终端用户)
这个脚本会帮你遍历指定目录的PDF,提取文件名开头的数字编号,然后在logos目录里找到对应编号的文件夹,自动移动文件。
步骤1:编写脚本
打开「文本编辑」,粘贴以下代码,然后把PDF_DIR和LOGOS_DIR替换成你实际的文件夹路径:
#!/bin/bash # 替换成你的PDF文件所在目录(比如"/Users/YourName/Documents/待移动PDF") PDF_DIR="/path/to/your/pdf/files" # 替换成已排序的logos文件夹路径(比如"/Users/YourName/Documents/logos") LOGOS_DIR="/path/to/your/logos/folder" # 遍历PDF目录下所有PDF文件 for pdf_file in "$PDF_DIR"/*.pdf; do # 跳过空匹配(比如目录里没有PDF时) [ -f "$pdf_file" ] || continue # 提取文件名开头的数字编号(比如从"68 - Logo..."里拿到"68") file_num=$(echo "$(basename "$pdf_file")" | grep -Eo '^[0-9]+') # 如果没提取到编号,跳过当前文件 [ -z "$file_num" ] && { echo "跳过无编号文件: $(basename "$pdf_file")"; continue; } # 在logos目录中查找匹配的目标文件夹 target_folder=$(find "$LOGOS_DIR" -maxdepth 1 -type d -name "$file_num - *" | head -n 1) # 如果找到文件夹,执行移动 if [ -n "$target_folder" ]; then echo "正在移动: $(basename "$pdf_file") → $target_folder" mv "$pdf_file" "$target_folder/" else echo "警告: 未找到对应编号的文件夹,跳过: $(basename "$pdf_file")" fi done
步骤2:运行脚本
- 把文件保存为
move_pdfs.sh(注意保存时选择「格式:纯文本」) - 打开终端,运行
chmod +x /path/to/move_pdfs.sh给脚本加执行权限 - 最后运行
/path/to/move_pdfs.sh即可
方案二:AppleScript(适合图形界面用户)
如果你更习惯可视化操作,这个AppleScript会让你选择文件夹,自动完成移动,不需要碰终端:
步骤1:编写脚本
打开「脚本编辑器」,粘贴以下代码:
set pdfFolder to choose folder with prompt "请选择PDF文件所在的文件夹:" set logosFolder to choose folder with prompt "请选择包含目标文件夹的logos文件夹:" tell application "Finder" set pdfFiles to every file of pdfFolder whose name ends with ".pdf" repeat with aFile in pdfFiles set fileName to name of aFile -- 提取文件名开头的数字编号 set fileNum to do shell script "echo " & quoted form of fileName & " | grep -Eo '^[0-9]+'" if fileNum is not "" then -- 在logos文件夹中查找匹配的目标文件夹 set targetFolders to every folder of logosFolder whose name starts with (fileNum & " - ") if length of targetFolders > 0 then move aFile to item 1 of targetFolders log "已完成移动: " & fileName & " → " & name of item 1 of targetFolders else log "警告: 未找到对应文件夹,跳过文件: " & fileName end if else log "警告: 无法提取编号,跳过文件: " & fileName end if end repeat end tell
步骤2:运行脚本
点击脚本编辑器的「运行」按钮,按照提示依次选择PDF文件夹和logos文件夹即可。如果需要重复使用,还可以把脚本导出为「应用程序」,双击就能运行。
为什么之前的脚本无效?
你之前的终端脚本有两个关键问题:
- 它会新建以编号命名的文件夹,而不是去
logos目录找已有的文件夹 - 没有处理PDF和目标文件夹不在同一目录的路径问题
上面的两个方案都解决了这些问题,还加入了错误提示,方便你排查异常情况。
内容的提问来源于stack exchange,提问作者Frank Doe
相关产品推荐
相关产品推荐

