php - Bash sanitize_file_name 函数

标签 php wordpress bash sanitization

我正在尝试找到一种在 Bash 脚本中清理/过滤文件名的方法,其方式与 WordPress 中的 sanitize_file_name 函数的工作方式完全相同。它必须获取一个文件名字符串并输出一个与该函数相同的干净版本。

You can see the function here .

GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-57-generic x86_64)
This is perl 5, version 18, subversion 2 (v5.18.2) built for x86_64-linux-gnu-thread-multi

输入文件名示例
这些实际上可以是并且通常是您可以在任何操作系统上创建文件名的任何内容,尤其是 Mac 和 Windows。

This File + Name.mov  
Some, Other - File & Name.mov  
ANOTHER FILE 2 NAME vs2_.m4v  
some & file-name Alpha.m4v  
Some Strange & File ++ Name__.mp4  
This is a - Weird -@ Filename!.mp4

输出文件名示例
这就是 WordPress sanitize_file_name 函数如何生成上面的示例。

This-File-Name.mov  
Some-Other-File-Name.mov  
ANOTHER-FILE-2-NAME-vs2_.m4v  
some-file-name-Alpha.m4v  
Some-Strange-File-Name__.mp4  
This-is-a-Weird-@-Filename.mp4

它不仅仅需要解决这些情况,它还执行与 sanitize_file_name 函数相同的功能,否则它会生成重复的文件,并且它们不会在网站上更新。

我的一些想法是,也许我可以以某种方式使用该函数本身,但该视频编码服务器上没有 PHP,因为它是一个非常小的服务器,通常只是对视频进行编码并上传它们。它没有太多内存、CPU 能力或磁盘空间,它是一个 DigitalOcean 512MB RAM 服务器。也许我可以以某种方式在 Web 服务器上创建一个远程 PHP 脚本来通过 HTTP 处理它,但我也不完全确定如何通过 Bash 来做到这一点。

对于我有限的 Bash 技能来说,这太复杂了,所以我想知道是否有人可以提供帮助或知道已经执行此操作的脚本在哪里。我找不到一个。我能找到的只是将空格或特殊字符更改为下划线或破折号的脚本。但这并不是 sanitize_file_name 函数所做的全部。

如果您好奇,由于该网站处理视频的方式,文件名必须与此 WordPress 功能兼容。它允许人们通过 WordPress 上传视频,然后将视频发送到单独的视频服务器进行编码,然后发送到 Amazon S3 和 CloudFront 以在网站上提供服务。不过,它还允许使用外部媒体插件通过 Dropbox 添加视频(实际上现在使用 Dropbox 同步复制视频上传,但这是另一个小问题)。该视频服务器还同步到 Dropbox 帐户并将其中的文件夹列入白名单,并让此 Bash 脚本使用 inotifywait 监视 VideoServer Dropbox 文件夹,将视频从该文件夹临时复制到视频编码器对其进行编码的另一个文件夹。这样,当他们更新 Dropbox 中的视频时,它会自动重新编码并更新网站上显示的视频。他们可以通过 WordPress 上传文件,但由于某种原因他们似乎不想或不知道如何执行此操作。

最佳答案

如果您安装了 Perl,请尝试使用:

#!/bin/bash

function sanitize_file_name {
    echo -n $1 | perl -pe 's/[\?\[\]\/\\=<>:;,''"&\$#*()|~`!{}%+]//g;' -pe 's/[\r\n\t -]+/-/g;'
}

filename="Wh00t? it's a -- re@lly-weird {file&name} (with + Plus and__1% #of# [\$qRots\$!]).mov"

cleaned=$(sanitize_file_name "$filename")

echo original : "$filename"
echo sanitised: "$cleaned"

结果是:

original : Wh00t? it's a -- re@lly-weird {file&name} (with + Plus and__1% #of# [$qRots$!]).mov
sanitised: Wh00t-it's-a-re@lly-weird-filename-with-Plus-and__1-of-qRots.mov

看看 WP 函数,这模拟得相当好。

关于php - Bash sanitize_file_name 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43511508/

相关文章:

php - Google Search Console API - SearchAnalytics 500 错误

javascript - 如何为 Woocommerce 中的变体选项强制设置 "selected"属性?

JavaScript 和 WordPress(尝试了 2 种解决方案)

linux - 打开屏幕在bash文件中获取PID

bash - 持续扫描目录并在新项目上执行脚本

bash - 测试文件是否存在,bash脚本

php - 在 phpmyadmin mysql 中创建外键

php - 显示新页面然后返回主页的联系表?

php - 每秒记录 JSON 数据的最有效方法是什么

html - wordpress 引用自己的网站是不可能的