Bash 焦油及;拆分远程文件本地保存输出删除“;tar:删除引导`/';“来自成员名称”;来自输出的消息
这是一个由两部分组成的问题 我制作了一个bash脚本,登录到远程服务器,生成一个list.txt并保存在本地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
#!/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文档
,如本线程中所述