gpt4 book ai didi

linux - 通过 ssh 执行脚本时无法使用命令 `date` 或 `find`

转载 作者:太空宇宙 更新时间:2023-11-04 11:14:56 24 4
gpt4 key购买 nike

我已经构建了一个用于将补丁应用到服务器的脚本。它工作得很好(大概),并使用 --backup=t 语法备份它覆盖的任何文件。现在我需要移动这些备份,因为它们不再以 .php 结尾,而是以 .php.~1~ 结尾,这意味着如果您通过网络浏览器查看文件你会得到 php 脚本的纯文本输出

当使用以下命令登录到网络服务器时,我几乎可以正常执行此操作

for I in `sudo find /path/to/web/root -type f \( -name "*.*~1~" \)` ; do sudo mv $I ~/$I`date +%Y%m%d` ; done

有一个小问题,find 命令返回文件的完整路径,因此 $I 在 mv 中使用后需要截断,但这是另一个问题,超出了这个问题的范围

我遇到的问题是当我尝试远程执行此命令时出现以下错误

查找:找不到命令

日期:找不到命令

为了解决有关 find 的输出不适合迭代的问题,我进行了这个快速测试

findtest lukes$ ls web
1 1.~1~ 2 2.~1~ 3 4 6 6.~1~ 7 8 9
findtest lukes$ for I in `sudo find web -type f \( -name "*.*~1~" \)` ; do sudo mv $I $I`date +%Y%m%d` ; done
findtest lukes$ ls web
1 2 3 6 7 9
1.~1~20140201 2.~1~20140201 4 6.~1~20140201 8

最佳答案

永远不要使用这种语法:

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

关于linux - 通过 ssh 执行脚本时无法使用命令 `date` 或 `find`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21499565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com