如何从命令行创建一个空文件?

#1 楼

使用touch命令:

The touch utility sets the modification and access times of files to the
current time of day. If the file doesn't exist, it is created with
default permissions.


示例:

touch newfile


评论


您也可以使用touch newfile.txt或其他扩展名(如果需要指定扩展名)。

–gotqn
2014年4月26日上午8:18

@gotqn用于python touch newfile.py和ruby newfile.rb吗?

– kouty
16年8月30日在12:56

但是,如果newfile已经存在并且不为空,则触摸newfile将使您拥有一个非空文件。也许不是您想要的。

– Camille Goudeseune
17年9月26日在14:47

@CamilleGoudeseune我认为,如果newfile已经存在,那么touch命令将只更新文件的时间戳(这正是命令的目的),而无需编辑文件的内容。

– C0deDaedalus
18年3月13日在11:20

您不必这么认为;这是真的!但这不是问题要问的。

– Camille Goudeseune
18年3月13日在16:21

#2 楼

> newfile


还将创建一个空文件。如果该文件已经存在,它将被截断(清空)。要保留文件内容,请使用>>进行附加,如下所示:

>> file


即使文件存在,内容也不会被修改。

编辑:如果您没有要键入的任何内容,则此内容会更快:

user@host$ :> newfile
user@host$ :>> new_or_existing_file


注意。 :是这里的命令。它不是提示的一部分。

评论


现在是新的。它是bash特有的吗?

– tshepang
2011年1月15日下午6:40

我不这么认为。任何允许将输出流重定向到文件的外壳程序都应支持此功能。如果文件已经存在,它将截断该文件。如果您不想清空它,可以安全地使用它。

– Balki
2011年1月15日上午10:23

哇,我认为这就是所谓的作弊系统

– Bananarun
2014年6月23日12:00

#3 楼

cat /dev/null > file1.ext 


确切的方法还有另一种方法

echo "" > file2.ext 


区别是file1.ext将为零字节,而file2.ext将为零。一个字节。您可以通过

ls -l file*.*

进行检查

评论


不,'echo“”>'不会创建一个空文件,它会创建一个包含换行符的文件。如果出于某种原因要使用echo创建一个空文件,则必须使用'echo -n“”>',或者简单地使用'echo -n>'

– andol
2011年1月15日在8:00

#4 楼

使用vim编辑器,您还可以创建一个空文件。

vim filename


,然后保存

:wq


评论


好吧,在这种情况下,不是任何文本编辑器,而是vim。

– Nephente
2015年10月4日,12:15

这不是从命令行。也许如果您发布vim单线。

–阿西姆·贾利斯(Asim Jalis)
20年7月12日在20:45

#5 楼

如果您的echo版本支持-n开关,则命令

echo -n > file


将创建一个空文件。

或者您可以使用printf

printf '' > file


#6 楼

通常,在Linux上创建任何normal1文件都涉及open(2)openat(2)creat(2)系统调用(特别是带有O_CREAT标志)。这意味着,如果您调用执行这些系统调用的任何命令行实用程序,则可以创建一个新的空文件。
最常见的新文件名是使用以下内容创建的:

touch /tmp/new_file
: > /tmp/new_file
true > /tmp/new_file

> /tmp/new_file(仅bash外壳)

touch是一个独立的实用程序。其最初目的是更新文件的访问和修改时间,但是,如果文件不存在,则会创建该文件。另请注意,文件名-会得到特殊处理,因此,如果您确实要创建一个名为-的文件,则必须将其用单引号或双引号引起来。 stdout流的运算符。 >运算符使用>标志专门调用openat()系统调用。这意味着,如果文件名不存在-将被创建,如果文件名存在-数据将被截断(因此消失了,因此应谨慎使用O_WRONLY|O_CREAT|O_TRUNC)。如今,在大多数shell中,>true是内置的,因此,与:相比,: > /tmp/new_file的效率更高。
但是,它并不仅限于此。如前所述,任何可以执行touch /tmp/new_fileopen()openat()系统调用的东西都会创建一个文件。因此,我们可以:

create()
true|dd of=/tmp/newfile
truncate --size 0 /tmp/new_filename.txt
cp /dev/null /tmp/null_file

true|tee /tmp/some_other_filemktemp(用于创建不需要的临时文件在重新启动之间存在!)

当然,上面提到的所有实用程序都不专门创建文件。但是它们执行必要的系统调用,这使我们可以调整命令。

当然,在编程或脚本编制级别,我们可能还想创建一个文件,尤其是出于效率目的(因为从Perl脚本或Python调用诸如tempfile之类的外部命令将需要其他资源)。 -liner:
$ python -c 'import sys,os;f=sys.argv[1];os.utime(f,None) if os.path.exists(f) else open(f,"a").close' myfile.txt

我们可以用以下代码使其更短:
$ python -c 'import sys,os;f=sys.argv[1];'$'\n''with open(f,"a"): os.utime(f,None)' mysecondfile.txt 

在Perl中:
$ perl -e 'open(my $fh,">","/tmp/perlfile")'


1其他类型诸如硬/软链接,字符或阻止特殊设备,目录,命名管道或套接字之类的文件需要完全不同的系统调用。