Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 焦油及;拆分远程文件本地保存输出删除“;tar:删除引导`/';“来自成员名称”;来自输出的消息_Bash_Ssh_Split_Pipe_Tar - Fatal编程技术网

Bash 焦油及;拆分远程文件本地保存输出删除“;tar:删除引导`/';“来自成员名称”;来自输出的消息

Bash 焦油及;拆分远程文件本地保存输出删除“;tar:删除引导`/';“来自成员名称”;来自输出的消息,bash,ssh,split,pipe,tar,Bash,Ssh,Split,Pipe,Tar,这是一个由两部分组成的问题 我制作了一个bash脚本,登录到远程服务器,生成一个list.txt并保存在本地 #!/bin/bash sshpass -p "xxxx" ssh user@pass ls /path/to/files/ | grep "^.*iso" > list.txt 然后使用list.txt启动for循环 for f in $(cat list.txt); do 下一个命令将分割目标文件并将其保存在本地 sshpass -p

这是一个由两部分组成的问题

我制作了一个bash脚本,登录到远程服务器,生成一个list.txt并保存在本地

#!/bin/bash
sshpass -p "xxxx" ssh user@pass ls /path/to/files/ | grep "^.*iso" > list.txt
然后使用list.txt启动for循环

for f in $(cat list.txt); do
下一个命令将分割目标文件并将其保存在本地

sshpass -p "xxxx" ssh user@pass tar --no-same-owner -czf - /path/to/files/$f | split -b 10M - "$f.tar.bz2.part"
问题1

我需要帮助理解上述命令,为什么它要在本地保存*零件文件?尽管这是我打算做的,但我想更好地理解它,我该如何反过来做,tar和split文件将输出保存到远程目录(需要使用相同的工具sshpass翻转上述命令中发生的情况)

问题2

当运行上述命令时,即使我没有使其变得冗长,它仍会打印此消息

tar: Removing leading `/' from member names
我如何摆脱它,因为我有自己的echo输出作为脚本的一部分,我在网上搜索后尝试了以下内容,但我认为我将一些命令组合在一起会混淆tar并破坏操作

我试过这些,运气不好

sshpass -p "xxxx" ssh user@pass tar --no-same-owner -czfP - /path/to/files/$f | split -b 10M - "$f.tar.bz2.part

sshpass -p "xxxx" ssh user@pass tar --no-same-owner -czf -C /path/to/files/$f | split -b 10M - "$f.tar.bz2.part

sshpass -p "xxxx" ssh user@pass tar --no-same-owner -czf - /path/to/files/$f | split -b 10M - "$f.tar.bz2.part > /dev/null 2>&1

sshpass -p "xxxx" ssh user@pass tar --no-same-owner -czf - /path/to/files/$f  > /dev/null 2>&1 | split -b 10M - "$f.tar.bz2.part
以上所有操作都会中断操作,我希望它根本不显示任何消息。我怀疑这与正则表达式以及管道如何通过参数有关。欢迎您的任何意见


无论如何,这只是脚本的一部分,另一部分在tar和拆分后上载处理过的文件,但我必须将其拆分为几个命令,在本地“tar | split”,然后通过rclone上载。如果我可以通过SSH远程传输S拆除器的输出并将其远程保存,则效率会更高。

首先,在使用<代码> SSHPASS/<代码>时,必须考虑安全漏洞。

关于问题1:

使用
tar
-f-
选项将动态创建tar,并将发送到
stdout
|
分隔命令

  • sshpass-p“xxxx”sshuser@passtar--没有相同的所有者-czf-/path/to/files/$f
    -远程运行
  • split-b 10M-“$f.tar.bz2.part”
    -在本地shell中运行
  • 第二个命令从第一个命令(输出
    tar
    读取
    stdin
    ),并在本地创建文件。 如果您想在远程机器上执行所有操作,可以将其余命令用引号括起来,如下所示(阅读其他有关qouting的源代码)

    sshpass-p“xxxx”sshuser@pass'tar--没有相同的所有者-czf-/path/to/files/$f | split-b 10M-“$f.tar.bz2.part”'

    关于问题2。

    tar:从成员名称中删除前导“/”由
    tar
    命令生成,该命令向
    STDERR
    发送错误/警告,在终端中,
    STDERR
    默认为用户屏幕

    因此,您可以通过添加
    2>/dev/null
    来抑制
    tar
    错误:


    sshpass-p“xxxx”sshuser@passtar--没有相同的所有者-czf-/path/to/files/$f2>/dev/null | split-b 10M-“$f.tar.bz2.part

    谢谢你的回答,如果你澄清最后一件事,我将接受答案。反过来我该怎么做呢。动态创建tar拆分并通过ssh将输出发送到远程存储?因此,与第一个命令相反,将命令括在引号中(在您的例子中是单个qoutes)将在远程计算机中运行所有命令。使用张贴的答案中建议的命令。此外,如果您想发送多个命令,可以使用
    here文档
    ,如本线程中所述