繁体   English   中英

Shell脚本以递归方式重命名带有特殊字符的文件名转义?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM