[英]Shell script to recursively rename filenames with special characters escaped?
Php有一个方法escapeshellcmd()
,它可以转义字符串中的任何字符,这些字符可能用于欺骗shell命令执行任意命令。
<?php
exec(find /music -type f -iname '*mp3'", $arrSongPaths);
echo $arrSongPaths[0] //prints It Won´t Be Long.mp3;
echo escapeshellcmd($arrSongPaths[0]) //prints It Wont Be Long.mp3;
?>
有没有办法编写一个shell脚本,它会递归重命名特殊字符转义的文件名(特别是* mp3)?
我试着在php中这样做
$escapedSongPath = escapeshellarg($arrSongPaths[0]);
exec("mv $arrSongPaths[0] $escapedSongPath");
但那没用。 无论如何,最后一行代码是不安全的,因为你正在执行一个具有潜在危险文件名$arrSongPaths[0]
。
为了爱所有安全相关的原因你为什么不使用php rename
命令 - 它不会遇到任何shell转义问题。 将exec("mv ...")
替换为:
rename($arrSongPaths[0], $escapedSongPath)
...并检查错误。
而不是使用exec(find...)
使用glob php操作页面中的recursive_glob
提示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.