将多个命令合并为一行

9 bash

我有一个名为的目录myname,该目录存档在myname.tar. 现在我想把myname.tar它解压,然后删除目录中的所有文件myname(解压后)。

以下是我执行上述任务的命令:

find -name deleteme.tar
tar -xvf deleteme.tar
rm -r delete/*
Run Code Online (Sandbox Code Playgroud)

这些单独的命令工作正常,但我需要一个单行命令,所以我尝试了这个:

find -name deleteme.tar | tar -xvf deleteme.at | rm -r delete/*
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

"rm -r deleteme/*
rm: cannot remove `deleteme/*': No such file or directory "
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Paw*_*ian 29

您要查找的符号称为控制运算符。您使用的是错误的 - 您需要;&&

;,命令是按顺序执行的,上一个是否成功都没有关系。

使用&&,每个失败的命令都会阻止下一个命令的执行。

例如,您可以在8.1 中阅读更多内容。控制运算符


pol*_*mon 7

如果您使用 bash,我建议您阅读 bash ( man bash)的手册页,并搜索“控制运算符” ( /control operator+ [Enter])。

在那里,解释了诸如|和之类的不同功能;

不过,您可能想考虑使用&&而不是;。如果这样做,则只有在前一个功能成功时才能按该顺序执行以下功能。意思是,如果find找不到您的文件,它不会尝试压缩任何内容

find -name deleteme.tar && tar xvf deleteme.tar && rm -r delete/* || echo "something went wrong" 1>&2
Run Code Online (Sandbox Code Playgroud)

只是一个小建议,虽然...