我已经构建了一个脚本,用于将补丁应用到服务器。它运行良好(ish)并使用--backup=t
语法备份它覆盖的任何文件。现在我需要移动这些备份,因为它们不再结束.php
,而是以.php.~1~
结束,这意味着如果您通过Web浏览器查看文件,您将获得{{{ 1}}脚本
使用以下命令登录网络服务器时,我几乎这样做
php
有一个小问题,find命令返回文件的完整路径,因此for I in `sudo find /path/to/web/root -type f \( -name "*.*~1~" \)` ; do sudo mv $I ~/$I`date +%Y%m%d` ; done
在mv中使用后需要截断,但这是另一个问题,超出了这个问题的范围
我遇到的问题是,当我尝试远程执行此命令时,我收到以下错误
$I
find: command not found
为了解决有关date: command not found
不适合迭代的输出的问题,我对此进行了快速测试
find
答案 0 :(得分:1)
永远不要使用这种语法:
for var in in `cmd`; do ... ; done
for var in in $(cmd); do ... ; done
有关详细信息,请参阅此reminder。
否则,您不必使用循环对find
返回的每个项执行命令。
find [...] -exec [commands] {} \;
以下是一个例子:
find /home/yourdir -name "*.txt" -exec cat {} \;
它比以下好多了:
for i in $(find /home/yourdir -name "*.txt"); do cat $i; done
最后,您能否远程向我们提供以下变量的内容?
echo $PATH
echo $SHELL
答案 1 :(得分:0)
可能是您为远程主机设置的用户设置的环境非常少。由于某种原因,可能无法设置PATH。
尝试使用完整路径查找和日期:
for I in `sudo /bin/find /path/to/web/root -type f \( -name "*.*~1~" \)` ; do sudo mv $I ~/$I`/bin/date +%Y%m%d` ; done
我认为如果在这里缺少PATH,那么'mv'也不会被发现。