将命令的输出附加到 txt 文件并将其放置在不可写的目录中?

将命令的输出附加到 txt 文件并将其放置在不可写的目录中?

如果我尝试例如:

目录A我没有写入权限

sudo ls -l > /home/A/a.txt
bash: /home/A/a.txt: Permission denied

那么我该如何实现这个技巧呢,任何建议都值得感激。

答案1

tee是人们通常使用的命令。您可以通过管道连接到它,它会重定向到文件(以及控制台)。

ls -l | sudo tee /home/A/a.txt

它也有一个附加标志(相当于>>):

ls -l | sudo tee -a /home/A/a.txt

另一种方法是将整个子 shell 包装在 sudo 中:

sudo bash -c 'ls -l > /home/A/a.txt'

我更喜欢这样做tee,主要是因为这样你仍然可以以较低用户的身份运行大部分命令。当你将所有内容包装在一个sudo bash -c '...'构造中时,整个过程将以 root 用户身份执行。将某些内容重定向whoami到另一个用户的目录中可能会很麻烦。

正如我所引导的,tee还将输出反弹回STDOUT。这使得链接命令非常简单。

例如,如果您想将 .less 文件编译为 CSS(并保存它),请“最小化”该 CSS(并保存它),然后使用 gzip 压缩该最小化副本以保存您的服务器执行此操作(并保存它)。

您可以使用裸命令,每次使用完整的文件名:

lessc less/bootstrap.less > dist/bootstrap.css
cleancss --selectors-merge-mode ie8 dist/bootstrap.css > dist/boostrap.min.css
gzip -qk9 dist/boostrap.min.css

或者直接用 tee 进行管道传输:

lessc less/bootstrap.less | tee dist/bootstrap.css \
  | cleancss --selectors-merge-mode ie8 | tee dist/boostrap.min.css \
  | gzip -qc9 > dist/boostrap.min.css

这是我每天使用的代码。

可能效率更高(你节省了对后续文件的读取,tee将其保存在内存中),但我认为最重要的是,客观上代码更漂亮。当你每天处理这些无用的东西时,这是一个被低估的方面。

答案2

sudo您可以使用以下方式(或以拥有该目录的用户身份)创建文件:

sudo touch /home/A/a.txt

现在,您可以使用以下命令使另一个用户成为该文件的所有者:

sudo chown username:username /home/A/a.txt

替换username为您想要成为所有者的用户名。

或者如果您希望所有用户都能读取和编辑该文件:

sudo chmod 666 /home/A/a.txt

笔记:使用>则不会追加到文件。使用>>追加。

答案3

奥利答案是完美的,之后谷歌搜索后,我尝试以特权运行 shell 本身:

命令 :

sudo bash -c " ls -l > /home/A/a.txt"

并且它已解决。

相关内容