使用WordPress CLI批量导入媒体文件,如何保留目录结构?
解决WordPress CLI导入媒体时丢失年月层级的问题
问题原因
wp media import默认会以执行命令的当前日期为媒体文件分配年月分类,且默认不保留原文件的相对路径结构,导致后台媒体库全部归到命令执行当月的文件夹下——即使服务器上的实际目录结构未变。另外你之前的find命令使用了中文引号,会导致文件匹配失效,也是问题诱因之一。
解决方案
使用--preserve-filetime参数让WordPress读取文件的原始时间戳作为媒体发布日期,同时保留原文件的相对路径,具体命令如下:
方法1:直接用glob匹配(需开启shell的globstar)
先确保bash开启globstar(未开启则执行shopt -s globstar),再运行:
wp media import ~/public_html/2024/wp-content/uploads/Archive/**/*.{jpg,jpeg,png} --preserve-filetime --path=~/public_html/2024
方法2:用find命令(兼容所有shell)
注意使用英文引号和正确的逻辑分组:
find ~/public_html/2024/wp-content/uploads/Archive -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" \) | xargs wp media import --preserve-filetime --path=~/public_html/2024
关键参数说明
--preserve-filetime:强制WordPress使用文件的修改/创建时间作为媒体的发布日期,媒体库会自动按原始年月分类。--path:指定WordPress站点根目录,确保CLI工具能正确识别站点配置。
后续处理
如果之前已错误导入媒体条目,可先删除这些无效附件(操作前请备份数据库):
wp post delete $(wp post list --post_type=attachment --format=ids) --path=~/public_html/2024
再重新执行上述导入命令即可。
内容的提问来源于stack exchange,提问作者strangecharm
相关产品推荐
相关产品推荐

