如何将“cat”的输出重定向到不同的文件夹?

如何将“cat”的输出重定向到不同的文件夹?

我有一个 Python 脚本EulerianCycle.py和一个输入文件,欧拉循环.txt

py EulerianCycle euleriancycle.txt > cat euleriancycleout.txt通过进入当前文件夹(py是的别名) ,我可以得到正确的结果python3

但是,我当前文件夹中还有另一个文件夹,名为输出,我希望所有输出文件都指向该目录。

我试过了py EulerianCycle.py euleriancycle.txt | cd outputs/ | cat > euleriancycleout.txt

py EulerianCycle.py euleriancycle.txt | cat >cd outputs/euleriancycleout.txt

这让我管道破裂错误。

答案1

如果py EulerianCycle.py euleriancycle.txt写入标准输出流(我假设它会,否则你将无法将其通过管道传输到cat),那么cat在这里完全是多余的 - 你可以直接重定向标准输出,指定输出文件的绝对或相对路径:

py EulerianCycle.py euleriancycle.txt > outputs/euleriancycleout.txt

(注意:该目录outputs/必须已经存在)。


您的其他命令均无法按照您想象的方式运行。

  • 在 中py EulerianCycle euleriancycle.txt > cat euleriancycleout.txt,shellcat在当前目录中创建一个名为的文件,并将 的输出重定向py EulerianCycle到该文件,传递两个都 euleriancycle.txt并将euleriancycleout.txt其作为输入参数。

  • 在 中py EulerianCycle.py euleriancycle.txt | cat >cd outputs/euleriancycleout.txt,shellcd在当前目录中创建一个名为的文件,cat outputs/euleriancycleout.txt并将其写入文件cd,忽略来自管道的标准输入(cat仅在没有输入文件或显式输入时读取标准输入-)。

也许你在这里的目的是将输出传输到子壳喜欢:

py EulerianCycle.py euleriancycle.txt | (cd outputs; cat > euleriancycleout.txt)

或者

py EulerianCycle.py euleriancycle.txt | (cd outputs && cat > euleriancycleout.txt)

这里,cat在切换到目标目录后,读取子 shell 的标准输入(由管道提供)。第二个版本仅euleriancycleout.txtcd命令成功时创建;第一个版本在命令失败时在当前目录中创建cd

答案2

此外,您还可以使用:

EulerianCycle.py | tee euleriancycleout.txt

将内容同时通过 2 个单独的流发送到文本文件和标准输出。换句话说,内容最终将同时出现在文本文件中并打印在终端中。

我总是这样做,因为它可以向我显示所写的内容,并且省去了我打开 vim 来检查我的工作。

答案3

我发现我可以使用py EulerianCycle.py euleriancycle.txt | cat > euleriancycleout.txt | mv -t outputs/ euleriancycleout.txt

或者

py EulerianCycle.py euleriancycle.txt | cat > euleriancycleout.txt & mv -t outputs/ euleriancycleout.txt

仍然对可以更简洁地执行此操作的可能的命令持开放态度。:)

编辑:所呈现的代码效率不高,请参见绿色复选标记的答案

相关内容