Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 一个用于清空终端中多个文本文件的线性命令_Bash_Shell - Fatal编程技术网

Bash 一个用于清空终端中多个文本文件的线性命令

Bash 一个用于清空终端中多个文本文件的线性命令,bash,shell,Bash,Shell,如何使用单个命令清空终端中的多个文本文件 我的想法是,你可以使用类似的东西…: find/var/log/apache2/*log-exec`echo>'{}`; 我知道创建一个shell脚本非常简单,可以很容易地做到这一点: echo“#!/bin/sh\n\necho\”>“$1\”>/usr/local/bin/empty&&chmod+x/usr/local/bin/empty find/var/log/apache2/*.log-exec empty{}; 但是,在不以类似方式

如何使用单个命令清空终端中的多个文本文件

我的想法是,你可以使用类似的东西…:

find/var/log/apache2/*log-exec`echo>'{}`;
我知道创建一个shell脚本非常简单,可以很容易地做到这一点:

echo“#!/bin/sh\n\necho\”>“$1\”>/usr/local/bin/empty&&chmod+x/usr/local/bin/empty

find/var/log/apache2/*.log-exec empty{};
但是,在不以类似方式创建自己的脚本的情况下,是否可以做到这一点

#!/bin/bash

for file in /var/log/apache2/*.log; do
  : > "$file"
done
还是单行版本

for file in /var/log/apache2/*.log; do : > "$file"; done
如果需要递归到子曲面,则可以使用以下两个选项:

bash4.X Posix

您还可以使用
:>(tee*.log)
生成
tee(1)
程序来执行截断:

$ ls -l
total 1284
-rw-r--r-- 1 sarnold sarnold  10161 2011-12-30 17:47 alternatives.log
-rw-r----- 1 sarnold sarnold  50976 2011-12-30 17:47 auth.log
-rw-r--r-- 1 sarnold sarnold    759 2011-12-30 17:47 boot.log
-rw-r--r-- 1 sarnold sarnold  41377 2011-12-30 17:47 bootstrap.log
-rw-r----- 1 sarnold sarnold      0 2011-12-30 17:47 daemon.log
-rw-r--r-- 1 sarnold sarnold  73075 2011-12-30 17:47 dpkg.log
-rw-r--r-- 1 sarnold sarnold   2914 2011-12-30 17:47 fontconfig.log
-rw-r----- 1 sarnold sarnold 152295 2011-12-30 17:47 kern.log
-rw-r----- 1 sarnold sarnold      0 2011-12-30 17:47 lpr.log
-rw-r----- 1 sarnold sarnold    950 2011-12-30 17:47 mail.log
-rw-r--r-- 1 sarnold sarnold 212115 2011-12-30 17:47 pm-powersave.log
-rw-r--r-- 1 sarnold sarnold 413195 2011-12-30 17:47 pm-suspend.log
-rw-r--r-- 1 sarnold sarnold      0 2011-12-30 17:47 pycentral.log
-rw-r----- 1 sarnold sarnold      0 2011-12-30 17:47 ufw.log
-rw-r----- 1 sarnold sarnold      0 2011-12-30 17:47 user.log
-rw-r--r-- 1 sarnold sarnold 210426 2011-12-30 17:47 Xorg.0.log
-rw-r--r-- 1 sarnold sarnold  93985 2011-12-30 17:47 Xorg.1.log
$ : >(tee *.log)
$ ls -l
total 0
-rw-r--r-- 1 sarnold sarnold 0 2011-12-30 17:47 alternatives.log
-rw-r----- 1 sarnold sarnold 0 2011-12-30 17:47 auth.log
-rw-r--r-- 1 sarnold sarnold 0 2011-12-30 17:47 boot.log
-rw-r--r-- 1 sarnold sarnold 0 2011-12-30 17:47 bootstrap.log
-rw-r----- 1 sarnold sarnold 0 2011-12-30 17:47 daemon.log
-rw-r--r-- 1 sarnold sarnold 0 2011-12-30 17:47 dpkg.log
-rw-r--r-- 1 sarnold sarnold 0 2011-12-30 17:47 fontconfig.log
-rw-r----- 1 sarnold sarnold 0 2011-12-30 17:47 kern.log
-rw-r----- 1 sarnold sarnold 0 2011-12-30 17:47 lpr.log
-rw-r----- 1 sarnold sarnold 0 2011-12-30 17:47 mail.log
-rw-r--r-- 1 sarnold sarnold 0 2011-12-30 17:47 pm-powersave.log
-rw-r--r-- 1 sarnold sarnold 0 2011-12-30 17:47 pm-suspend.log
-rw-r--r-- 1 sarnold sarnold 0 2011-12-30 17:47 pycentral.log
-rw-r----- 1 sarnold sarnold 0 2011-12-30 17:47 ufw.log
-rw-r----- 1 sarnold sarnold 0 2011-12-30 17:47 user.log
-rw-r--r-- 1 sarnold sarnold 0 2011-12-30 17:47 Xorg.0.log
-rw-r--r-- 1 sarnold sarnold 0 2011-12-30 17:47 Xorg.1.log
$ 

或者使用
sed

sed Q -i *
将文件内容替换为空

更新并解释

sed
可以进行各种替换,例如使用正则表达式:

$ cat /etc/passwd | sed -e s/^[^:]*/USER/
模式为“替换任何内容直到:使用用户”,给出:

在混合中添加
-i
sed
可以就地编辑文件,因此您可能永远不想这样做:

$ sed -e s/^[^:]*/USER/ -i /etc/passwd
(请注意,在例如Mac OS X上,您需要在
-i
之后添加一个额外参数,以提供“备份后缀”,该后缀用于在
sed
对您的文件发挥作用之前进行备份)

现在的任务是让最短的
sed
脚本丢失所有输入,即
d
Q
d
将删除所有输入(然后不输出任何内容),
Q
将立即退出(并且不输出任何内容)
Q
大概是最快的

然后,
sarnold
示例如下所示:

$ ls -l
-rw-r--r-- 1 sarnold sarnold  10161 2011-12-30 17:47 alternatives.log
-rw-r----- 1 sarnold sarnold  50976 2011-12-30 17:47 auth.log
-rw-r--r-- 1 sarnold sarnold    759 2011-12-30 17:47 boot.log
$ sed Q -i *.log
$ ls -l
-rw-r--r-- 1 sarnold sarnold 0 2011-12-30 17:47 alternatives.log
-rw-r----- 1 sarnold sarnold 0 2011-12-30 17:47 auth.log
-rw-r--r-- 1 sarnold sarnold 0 2011-12-30 17:47 boot.log
$ 

您好,我很感谢您的回答,但我正在寻找一个oneliner命令。(见标题)谢谢!:)@《生命的大道》我放了一个单行版本。我还添加了另一种使用
find
的方法,与第一种使用for循环的方法相比,我更喜欢这种方法。如果您通过创建.log文件并使用
:>(tee*.log)
使问题更加具体,那么我将给出+1,这样他就不必为每个文件命名。尽管如果希望递归的次数超过当前值,仍然需要使用find或globstardir@SiegeX:很好的建议,它大大改进了我的例子。非常感谢。为了未来人们的利益,可以举个例子吗?@Highway:链接的另一端有一个。来吧,伊格纳西奥,你知道我们不喜欢只与其他答案链接的答案…@IgnacioVazquez Abrams这并不是一个回答这个问题的例子。嗨,谢谢你的回答。然而,这是非常模糊的+1如果您能提供一个工作示例和解释:这是非常聪明的;
d
是整个
sed(1)
脚本,上面写着“delete”。
-i
要求
sed(1)
执行编辑“就位”,而不需要备份文件
sed d-i*.log
更适合你的问题。完全同意。mvds,如果您可以编辑您的答案以反映@sarnold提供的描述和示例,我将选择您的答案。谢谢完成了,但我必须说我不会在实践中使用这个。这很有趣(就像
tee
方法),但一年后,你或其他任何人都会完全错过正在发生的事情。
USER:x:0:0:root:/root:/bin/bash
USER:x:1:1:daemon:/usr/sbin:/bin/sh
USER:x:2:2:bin:/bin:/bin/sh
etc etc
$ sed -e s/^[^:]*/USER/ -i /etc/passwd
$ ls -l
-rw-r--r-- 1 sarnold sarnold  10161 2011-12-30 17:47 alternatives.log
-rw-r----- 1 sarnold sarnold  50976 2011-12-30 17:47 auth.log
-rw-r--r-- 1 sarnold sarnold    759 2011-12-30 17:47 boot.log
$ sed Q -i *.log
$ ls -l
-rw-r--r-- 1 sarnold sarnold 0 2011-12-30 17:47 alternatives.log
-rw-r----- 1 sarnold sarnold 0 2011-12-30 17:47 auth.log
-rw-r--r-- 1 sarnold sarnold 0 2011-12-30 17:47 boot.log
$