генерировать пустые файлы - PullRequest
2 голосов
/ 20 августа 2010

Я хочу очистить 3 файла или сгенерировать их, если они не существуют. Правильна ли следующая команда?

> myone.txt > mytwo.txt > mythree.txt

или есть способ получше?

Ответы [ 5 ]

3 голосов
/ 20 августа 2010

вы можете использовать сенсорный для создания пустых файлов, если их не было.В противном случае то, что вы делаете, все в порядке

>file1 >file2 
1 голос
/ 20 августа 2010

Одна вещь, которую вы не можете сделать с >, это что-то вроде >file{0..9} или >file{foo,bar,baz}.Однако, если ваша система имеет truncate, вы можете сделать это:

truncate --size 0 file{0..9}
truncate --size 0 file{foo,bar,baz}

Используя другие аргументы с --size, вы можете сжать или расширить файл, но он сначала не очистит его, если вы не используете0 для размера (в первом из двух проходов, например).Расширенные файлы дополняются нулями.

1 голос
/ 20 августа 2010

Альтернативой прикосновению является использование dd, которое можно использовать для усечения существующих файлов,

dd if=/dev/null of=moo count=0
1 голос
/ 20 августа 2010

Я обычно использую touch для создания пустых файлов.Обычно он используется как утилита для обновления меток времени, но также создает именованный файл, если он не существует.

1 голос
/ 20 августа 2010

нет, не из оболочки.Для чтения сгенерированных системных вызовов это также довольно эффективно для встроенной оболочки:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...