Linux 循环命令、管道上一个命令';s输出
我知道您可以在bash中使用循环来重复一定次数的命令,尽管在bash脚本中使用它更方便 例如,假设我有一个文件已经压缩了好几次,我希望完全解压缩它Linux 循环命令、管道上一个命令';s输出,linux,bash,shell,Linux,Bash,Shell,我知道您可以在bash中使用循环来重复一定次数的命令,尽管在bash脚本中使用它更方便 例如,假设我有一个文件已经压缩了好几次,我希望完全解压缩它 cat file.txt | gzip -d | gzip -d | gzip -d 对于一个已经压缩了3次的文件来说,这已经足够实用了,但是如果该文件被压缩了,例如18次,它将变得非常笨拙。这怎么能简化呢?我想在前一个命令的输出上运行gzip-d命令n次。有没有一种方法可以从命令行执行?你可以沿着这些线做一些事情(原谅任何语法错误,考虑这个接近B
cat file.txt | gzip -d | gzip -d | gzip -d
对于一个已经压缩了3次的文件来说,这已经足够实用了,但是如果该文件被压缩了,例如18次,它将变得非常笨拙。这怎么能简化呢?我想在前一个命令的输出上运行gzip-d命令n次。有没有一种方法可以从命令行执行?你可以沿着这些线做一些事情(原谅任何语法错误,考虑这个接近BASH语法的伪代码):
你可以沿着这些线做任何事情(原谅任何语法错误,考虑这个接近BASH语法的伪代码):
如果您不记得或没有被告知文件压缩的频率,该怎么办? 您希望
gunzip
,直到它成为普通文件。当您不想覆盖原始文件时,制作副本是最简单的:
tmpfile=/tmp/mightbegz
cp file.txt ${tmpfile};
while [ $? -eq 0 ]; do
echo "Gunzipping Again"
mv ${tmpfile} ${tmpfile}.gz
gunzip -d ${tmpfile}.gz
done
当
gzip
无法gunzip
文件时,while循环将停止。如果您不记得或没有被告知文件压缩的频率,该怎么办?
您希望gunzip
,直到它成为普通文件。当您不想覆盖原始文件时,制作副本是最简单的:
tmpfile=/tmp/mightbegz
cp file.txt ${tmpfile};
while [ $? -eq 0 ]; do
echo "Gunzipping Again"
mv ${tmpfile} ${tmpfile}.gz
gunzip -d ${tmpfile}.gz
done
当
gzip
无法gunzip
文件时,while循环将停止。也有这样做的原因吗?我猜你不想重复运行gzip,这只是一个例子?我用它作为例子,说明如何使用前一个命令的输出作为下一个命令的输入来运行命令n次。我想知道是否可以从命令行执行。是否有这样做的原因?我猜你不想重复运行gzip,这只是一个例子?我用它作为例子,说明如何使用前一个命令的输出作为下一个命令的输入来运行命令n次。我想知道是否可以从命令行执行。在第二个示例中,then
语句应该引用recursive\u-pipe
(没有足够的字符允许编辑)@interoper感谢您捕捉到了这一点,现在更正了。在第二个示例中,then
语句应该引用recursive\u-pipe
(没有足够的字符允许编辑)@INTEROPER感谢您捕捉到这一点,现在更正。
tmpfile=/tmp/mightbegz
cp file.txt ${tmpfile};
while [ $? -eq 0 ]; do
echo "Gunzipping Again"
mv ${tmpfile} ${tmpfile}.gz
gunzip -d ${tmpfile}.gz
done