首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash sanitize_file_name函数

Bash sanitize_file_name函数
EN

Stack Overflow用户
提问于 2017-04-20 06:09:35
回答 2查看 2.9K关注 0票数 4

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

你可以在这里看到这个函数

GNU,版本4.3.11(1)-release (x86_64-pc-linux-gnu) Ubuntu14.04.5LTS(GNU/Linux3.13.0-57-通用x86_64) 这是perl 5,版本18,subversion 2 (v5.18.2),它是为x86_64-linux-gnu-多线程构建的。

示例输入文件名

在任何操作系统(特别是Mac和Windows )上,这些文件都可以而且经常是您可以创建的任何文件名。

代码语言:javascript
复制
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函数就是这样制作上面的示例的。

代码语言:javascript
复制
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 512‘s内存服务器。也许我可以在web服务器上创建一个远程PHP脚本来通过HTTP来处理它,但是我也不完全确定如何通过Bash来处理它。

对于我有限的Bash技能来说,这太复杂了,所以我想知道是否有人可以帮助或者知道脚本在哪里已经做到了这一点。我找不到一个。我所能找到的只有将空格或特殊字符转换为下划线或破折号的脚本。但这并不是sanitize_file_name函数所做的所有事情。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-20 10:55:39

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

代码语言:javascript
复制
#!/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"

结果是:

代码语言:javascript
复制
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函数来看,这很好地模拟了它。

票数 4
EN

Stack Overflow用户

发布于 2021-06-15 08:35:39

回答的启发。

代码语言:javascript
复制
EscapeFilename()
{
    printf '%s' "$@" | perl -pe 's/[:;,\?\[\]\/\\=<>''"&\$#*()|~`!{}%+]//g; s/[\s-]+/-/g;';
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43511508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档