【问题标题】:How would I tar extract pipe cd?我将如何 tar 提取管道 cd?
【发布时间】:2021-09-05 22:26:27
【问题描述】:

所以我发现我可以通过管道传输以下两个命令:

sudo wget https://example.com/folder.tar.gz
sudo tar xzvf folder.tar.gz

像这样:

sudo wget -q http://example.com/folder.tar.gz -O - | tar xzvf -

所以现在我想知道如何 cd 进入这个文件夹。

我猜的:

sudo wget -q http://example.com/folder.tar.gz -O - | tar xzvf - | cd
# and
sudo wget -q http://example.com/folder.tar.gz -O - | tar xzvf - | cd -

但这两个不起作用。我很确定我不是很了解管道。

【问题讨论】:

  • 管道将一个程序的输出连接到另一个程序的输入 - 就像管道如何将输出从您的花园水龙头(水龙头)发送到您的草坪洒水器一样。减号 (-) 是一种快捷方式,表示 inputoutput - 它的含义取决于位置/上下文。
  • @MarkSetchell 这是否意味着我尝试的第二件事应该可以工作?

标签: shell pipe


【解决方案1】:

管道将一个程序的输出连接到另一个程序的输入 - 就像管道如何将花园水龙头(水龙头)的输出发送到草坪洒水器一样。

减号 (-) 是表示输入或输出的快捷方式 - 它的含义取决于位置/上下文。

您的wget 命令从网络上获取一些数据,并且由于-,它通过管道将其发送到tar

tar 命令从管道读取该数据,因为它的-,并创建一些文件和目录。

tar 命令不会向任何其他管道发送任何内容,因此cd 将没有任何内容可供读取。您也不知道要访问的目录的名称。如果你这样做了,你可以像这样作为后续行动去那里:

wget ... - | tar ... - ; cd SOMEWHERE

或者你可以让它以tar 命令成功运行为条件:

wget ... - | tar ... - && cd SOMEWHERE

【讨论】:

  • 所以如果我想制作一个shell脚本来为我做这件事,那么我必须将wget的输出保存在一个变量中,然后将它传递给tarcd?
  • 运行脚本时,它会启动一个新进程。该过程将从网络上获取文件,解压缩其内容,更改目录然后退出。新进程退出。它消失了。它进入哪个目录并不重要,因为这不会影响启动脚本的 shell……因为它是一个单独的、不同的进程。
  • 也许你可以更明确地说明你想做什么。如果您下载的 tar 存档中有 5 个目录,那您想去哪里呢?到了那里你打算做什么?
  • 我想解压到一个文件夹,然后cd 进入那个文件夹。这只是看看我是否可以在一行中完成它,或者我是否必须为它制作一个带有一些外部逻辑的脚本。谢谢你的帮助,我学到了很好的一课:3
猜你喜欢
  • 2023-03-03
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-18
相关资源
最近更新 更多