簡體   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