我尝试过通过ssh进行tar存档,我认为在这个任务中没有什么是棘手的。但是我需要从一个包含最近修改过的目录的路径中创建tar文件。为此,我使用这样的命令:
cd "$(\ls -1dt ./*/ | head -n 1)"
整个命令如下所示:
ssh root@$ip "cd /dir1/dir2/ && cd "$(\ls -1dt ./*/ | head -n 1)" && cd /dir3/ && tar -cpf - *.log" > $dir/out.tar
不幸的是,我得到:
./最近/:没有这样的文件或目录
我已尝试将\ls-1dt./*/|head-n1
更改为-ls-1dit/*/-head-n2
然后我得到了:
cd: dir3/:没有这样的文件或目录
/dir1/dir2/中的所有目录,我正在寻找最近更改的目录,都包含dir3目录,这就是为什么以前的错误是不可能的。
此外,如果我通过ssh手动访问我的远程机器并逐个执行每个命令(diffirent cd、searching、tar ),搜索将正确无误地工作,但在我的情况下,我需要“整个字符串”命令,因为它只是我的整个自动化脚本的一部分。
如何解决这个问题?
谢谢
您将提供给< code>ssh的命令用双引号括起来,这会导致两种不良行为:
> < li>
您当前的问题是,您的本地shell在将带引号的字符串传递给< code>ssh之前将其展开。在这样做的时候,它执行子shell ($(ls...)
),这可能是远程服务器抱怨找不到结果目录的原因
你有两个双引号字符串和它们之间的子外壳。只要subshell返回一个单词,您就可以了,但是如果它的结果包含多个单词,您会突然向< code>ssh传递多个参数,这很可能会失败
通过用单引号括起您希望远程主机执行的命令,可以解决/避免这两个问题:
ssh root@$ip 'cd /dir1/dir2/ && cd "$(\ls -1dt ./*/ | head -n 1)" && cd /dir3/ && tar -cpf - *.log' > $dir/out.tar
在这种情况下,您的本地shell不会扩展字符串,远程主机将正确执行以下命令(在该命令中,它将扩展双引号部分,执行子shell):
cd /dir1/dir2/ && cd "$(\ls -1dt ./*/ | head -n 1)" && cd /dir3/ && tar -cpf - *.log
有谁能帮我找到这个命令吗?命令是 如果我错了,请纠正我,但正如我所看到的,这将压缩当前目录中的文件,同时它将其复制到目标位置,对吗?这是否意味着当前文件将是完整的(不会被压缩)?
与不保留目录的tar和不保留目录的Tar创建相关 大家好, 感谢您理解 -C 用于创建一个 tar(tar -cf a/b/c/tar 文件.tar -C a/b/c .),而不保留目录结构。 但是当我取消其更改父目录权限时。请帮助我了解更多。它不应该在提取tar(tar-xvf)时更改父目录权限。
问题内容: 我试图以递归方式将本地主机中的目录与远程linux机器中的目录进行比较。但是,当我执行下一条命令时: 说这是行不通的: 差异:ssh admin@10.0.0.10:/ home / admin:没有这样的文件或目录 递归比较目录内容的正确方法是什么? 提前致谢 问题答案: 如果不需要区分文件中的详细信息,只需获取目录/文件名的差异,然后尝试以下操作: (注意:需要设置“没有密码的SS
我确实有以下问题。我已经将一些具有相同层次结构和网站结构的网站迁移到了一个使用Apache 2.4.7的新服务器上。旧服务器有2.2.22。我已经将默认的DocumentRoot更改为/var/www 为了进行测试,我在那里创建了一个索引.html文件,其中有一个点作为内容。现在我在 /sites-enabled/ 中确实有一个包含以下内容的文件: 这是我以前的2.2.22 Apache上的一个有
问题内容: 有没有办法只选择目录中的最后一个文件(带有扩展名?) 还是我必须解析整个目录并使用检查? 问题答案: 是的,您必须通读它们。但是由于目录访问已被缓存,因此您不必担心。
问题内容: 所以现在我有一个目录,并且正在获取文件列表 但是,这会检索目录中的每个文件。我将如何以最有效的方式仅检索具有某些扩展名的文件(例如.ini)。 问题答案: PHP具有强大的功能,可以帮助您仅捕获所需的文件。它叫 glob- 查找与模式匹配的路径名 这是一个示例用法-