Estoy tratando de encontrar una manera de desinfectar/filtrar nombres de archivos en un script Bash exactamente de la misma manera que funciona la función sanitize_file_name de WordPress. Tiene que tomar una cadena de nombre de archivo y escupir una versión limpia que sea idéntica a esa función.
GNU bash, versión 4.3.11(1)-lanzamiento (x86_64-pc-linux-gnu)
Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-57-genérico x86_64)
Este es perl 5, versión 18, subversión 2 (v5.18.2) creado para x86_64-linux-gnu-thread-multi
Ejemplos de nombres de archivos de entrada
Estos pueden ser y, a menudo, son prácticamente cualquier cosa que pueda hacer un nombre de archivo en cualquier sistema operativo, especialmente Mac y 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 Ejemplos de nombres de archivos de salida
Así es como la función sanitize_file_name de WordPress hace los ejemplos anteriores.
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 No solo tiene que resolver estos casos, ha realizado las mismas funciones que la función sanitize_file_name o producirá archivos duplicados y no se actualizarán en el sitio.
Algunos pensamientos que he tenido son que tal vez pueda usar esa función de alguna manera, pero este servidor de codificación de video no tiene PHP, ya que es un servidor bastante pequeño y normalmente solo codifica videos y los carga. No tiene mucha memoria, potencia de CPU o espacio en disco, es un servidor de RAM de 512 MB de DigitalOcean. Tal vez de alguna manera pueda crear un script PHP remoto en el servidor web para manejarlo a través de HTTP, pero nuevamente, no estoy completamente seguro de cómo hacerlo a través de Bash.
Es demasiado complicado para mis habilidades limitadas de Bash, así que me pregunto si alguien puede ayudarme o sabe dónde está un script que ya hace esto. No pude encontrar uno. Todo lo que pude encontrar son secuencias de comandos que cambian espacios o caracteres especiales en guiones bajos o guiones. Pero esto no es todo lo que hace la función sanitize_file_name .
En caso de que tenga curiosidad, los nombres de archivo deben ser compatibles con esta función de WordPress debido a la forma en que este sitio web está configurado para manejar videos. Permite que las personas carguen videos a través de WordPress que luego se envían a un servidor de video separado para codificarlos y luego se envían a Amazon S3 y CloudFront para publicarlos en el sitio. Sin embargo, también permite agregar videos a través de Dropbox usando el complemento External Media (que en realidad está duplicando la carga del video con la sincronización de Dropbox ahora, pero ese es otro problema menor). Este servidor de video también se está sincronizando con una cuenta de Dropbox e incluye las carpetas en la lista blanca y tiene este script de Bash mirando una carpeta de Dropbox de VideoServer usando inotifywait que copia videos de ella a otra carpeta temporalmente donde el codificador de video los codifica. De esta manera, cuando actualicen los videos en su Dropbox, se volverá a codificar y actualizará automáticamente el video que se muestra en el sitio. Podrían simplemente cargar los archivos a través de WordPress, pero parece que no quieren o no saben cómo hacerlo por alguna razón.
Si tiene Perl instalado, intente con:
#!/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"El resultado es:
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.movMirando la función WP, esto la emula bastante bien.