如何直接用'unexpand'覆盖(空格到标签转换)?

jez*_*mck 7 unix linux redirect overwrite

我正在尝试使用类似的东西

unexpand -t 4 *.php
Run Code Online (Sandbox Code Playgroud)

但我不确定如何写这个命令来做我想要的.

古怪,

unexpand -t 4 file.php > file.php
Run Code Online (Sandbox Code Playgroud)

给我一个空文件.(即没有任何东西覆盖file.php)

我可以指定多个文件,但不知道如何覆盖每个文件.

我可以使用我的IDE,但有超过200个文件需要更换约67000个实例,这需要一段时间.

我希望我的问题的答案将是标准的unix票价,但我还在学习......

unw*_*ind 11

您很少使用输出重定向来替换输入.替换使用内部支持它的命令(因为他们自己执行基本步骤).从shell级别来看,分两步工作要好得多,如下所示:

  1. 在foo上执行操作,创建foo.tmp
  2. 将foo.tmp移动(重命名)为foo,覆盖原始文件

这将很快.它需要更多的磁盘空间,但如果在继续下一个文件之前执行这两个步骤,则只需要与最大的单个文件一样多的额外空间,这应该不是问题.

草图脚本:

for a in *.php
do
  unexpand -t 4 $a >$a-notab
  mv $a-notab $a
done
Run Code Online (Sandbox Code Playgroud)

你可以做得更好(错误检查,等等),但这是基本的大纲.

  • 为了偏执,我倾向于:unexpand -t 4"$ a">"$ a"-notab && mv"$ a"-notab"$ a"(这对于一些额外的角色来说是非常安全的).此外,报价是****good**idea*. (4认同)