将多个命令合并到一行中

将多个命令合并到一行中

我有一个名为 的目录myname,该目录存档在myname.tar.现在我想将myname.tar其取消存档,并删除目录中的所有文件myname(取消存档后)。

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

find -name deleteme.tar
tar -xvf deleteme.tar
rm -r delete/*

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

find -name deleteme.tar | tar -xvf deleteme.at | rm -r delete/*

我收到这个错误:

"rm -r deleteme/*
rm: cannot remove `deleteme/*': No such file or directory "

我究竟做错了什么?

答案1

您正在寻找的符号称为控制操作员。您使用了错误的 - 您需要;&&

使用 时;,命令会按顺序执行,无论前一个命令是否成功结束。

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

您可以阅读更多内容,例如8.1.控制操作员

答案2

如果您使用的是 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

不过,这只是一个小小的建议……

相关内容