繁体   English   中英

防止'cp'从bash脚本输出文件名

[英]Prevent 'cp' from outputting the file name from a bash script

我有一个Shell脚本,它将一些文件复制到当前目录,对其进行压缩,然后将压缩后的文件流式传输到stdout。

在客户端,我使用plink执行脚本并将stdin流传输到文件。

这几乎可行。

从脚本内部执行时,似乎cp命令输出正在复制的文件名。 如果我执行' cp / path / to / file1。 '在外壳上安静地执行; 如果我在脚本中执行它,则会输出“ file1”。

我该如何预防? 我试过将cp命令的输出传递到/ dev / null和虚拟文本文件,但是没有运气。

谢谢你的帮助。

剧本

#!/bin/bash

cp /path/to/file1 .
cp /path/to/file2 .
cp /path/to/file3 .

tar -cvzf package.tgz file1 file2 file3

cat package.tgz

输出

file1
file2
file3
<<binary data>>

不是cp,而是tar。 您将其传递给-v,这将使其打印文件名。

啊哈! 我一直以为tar发出的文件名将转到stderr ,但并非总是如此:仅当您将tar文件写入stdout-v编写的文件才转到stderr

$ tar cvf - share > /dev/null
share/                         # this must be going
share/.DS_Store                # to stderr since we
share/man/                     # redirected stdout to
share/man/.DS_Store            # /dev/null above.
share/man/man1/
share/man/man1/diffmerge.man1

反例:

$ tar cvf blah.tar share > /dev/null

这没有产生文件名列表,因为它们被发送到/dev/null 我想你每天都学到新东西。 :-)

正如其他人指出的那样,tar的-v(详细)选项会将文件名踢出到STDERR。 您还可以通过让tar将压缩文件流写入STDOUT来提高脚本的效率:

tar zcf - file1 file2 file3

在此示例中,作为文件名传递的“-”选项使tar将输出写入STDOUT。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM