Как создать пустой файл из командной строки

Как создать пустой файл из командной строки?

224
задан 15 January 2011 в 01:59

6 ответов

Используйте команду 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
264
ответ дан 15 January 2011 в 01:59
> newfile

Также создаст пустой файл. Если файл уже существует, он будет усечен (опустошен). Чтобы сохранить содержимое файла, используйте >> для добавления, как в:

>> file

Даже если файл существует, его содержимое останется нетронутым.

Редактирование: Если у вас нет содержимого для ввода, то это быстрее:

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

Примечание. : - это команда здесь. Она не является частью приглашения.

85
ответ дан 15 January 2011 в 01:59
cat /dev/null > file1.ext 

точный способ также существует другой способ

echo "" > file2.ext 

Разница в том, что file1.ext будет нулевым байтом, а file2.ext - одним байтом. Вы можете проверить это с помощью

ls -l file*.*
15
ответ дан 15 January 2011 в 01:59

Команда

echo -n > file

создает пустой файл, если ваша версия echo поддерживает переключатель -n.

Или вы можете использовать printf

printf '' > file
]
3
ответ дан 15 January 2011 в 01:59

В общем, создание любого обычного файла 1 файл в Linux включает 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 . Это означает, что если имя файла не существует - оно будет создано, а если оно есть - данные будут усечены (и, следовательно, удалены, поэтому > следует использовать с осторожностью). В большинстве современных оболочек true или : является встроенным, поэтому выполнение :> / tmp / new_file будет более эффективным, хотя и незначительно по сравнению с touch /tmp/new_file[1171797 visible.

Но, конечно, на этом не заканчивается. Как уже упоминалось, все, что может выполнять системные вызовы open () , 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_file
  • mktemp или tempfile (для создания временных файлов, которые не должны существовать между перезагрузками!)

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


Конечно, на уровне программирования или написания сценариев мы также можем захотеть создать файл, особенно в целях повышения эффективности (поскольку вызов внешних команд, таких как touch из сценария Perl или Python потребуют дополнительных ресурсов).

Однострочный текст Python:

$ 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 Для других типов файлов, таких как жесткие / программные ссылки, символьные или блочные специальные устройства, каталог, именованные каналы или сокеты, требуются совершенно другие системные вызовы.

2
ответ дан 15 January 2011 в 01:59

Использование редактора vim вы также можете создать пустой файл.

vim filename

Затем сохраните

:wq
9
ответ дан 15 January 2011 в 01:59

Другие вопросы по тегам:

Похожие вопросы: