我想清空3个文件或生成它们(如果它们不存在)。以下命令是否正确?
> myone.txt > mytwo.txt > mythree.txt
还是有更好的方法吗?
答案 0 :(得分:3)
如果不存在,您可以使用触摸创建空文件。否则,你正在做的事情是正确的
>file1 >file2
答案 1 :(得分:1)
不,不是来自shell。读取生成的系统会调用它,对于内置的shell来说它也非常有效:
matt@stanley:~$ strace bash -c '> a > b > c'
...
open("a", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
fcntl64(1, F_GETFD) = 0
fcntl64(1, F_DUPFD, 10) = 10
fcntl64(1, F_GETFD) = 0
fcntl64(10, F_SETFD, FD_CLOEXEC) = 0
dup2(3, 1) = 1
close(3) = 0
open("b", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
fcntl64(1, F_GETFD) = 0
fcntl64(1, F_DUPFD, 10) = 11
fcntl64(1, F_GETFD) = 0
fcntl64(11, F_SETFD, FD_CLOEXEC) = 0
dup2(3, 1) = 1
close(3) = 0
open("c", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
fcntl64(1, F_GETFD) = 0
fcntl64(1, F_DUPFD, 10) = 12
fcntl64(1, F_GETFD) = 0
fcntl64(12, F_SETFD, FD_CLOEXEC) = 0
dup2(3, 1) = 1
close(3)
答案 2 :(得分:1)
我通常使用touch来创建空文件。它通常被强制转换为更新时间戳的实用程序,但如果它不存在,也会创建命名文件。
答案 3 :(得分:1)
触摸的替代方法是使用dd
,可用于截断现有文件,
dd if=/dev/null of=moo count=0
答案 4 :(得分:1)
>
无法做到的一件事就像>file{0..9}
或>file{foo,bar,baz}
。但是,如果您的系统有truncate
,则可以执行此操作:
truncate --size 0 file{0..9}
truncate --size 0 file{foo,bar,baz}
通过使用--size
的不同参数,您可以缩小或扩展文件,但除非您使用0
作为大小,否则它不会先将其清空(例如,在两次传递的第一个中) )。扩展文件用空值填充。