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

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

Используйте touch команда:

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

Пример:

touch newfile
> newfile

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

>> file

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

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

user@host$ :> newfileuser@host$ :>> new_or_existing_file

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

cat /dev/null > file1.ext 

точный способ есть и другой способ

echo "" > file2.ext 

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

ls -l file*.*

С помощью vim редактор вы также можете создать пустой файл.

vim filename

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

:wq

В общем, создание любого регулярного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 )

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

По контрасту, > является оператором перенаправления оболочки для поток stdout. Тот > оператор специально вызывает openat() системный вызов с O_WRONLY|O_CREAT|O_TRUNC флаги. Это означает, что если имя файла не существует - оно будет создано, а если оно существует - данные будут усечены (и, следовательно, удалены, так что > следует использовать с осторожностью). В настоящее время в большинстве оболочек true или : является встроенным , поэтому выполнение : > /tmp/new_file будет более эффективным, хотя и незначительно по сравнению с touch /tmp/new_file.

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

Команда

echo -n > file

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

Или вы могли бы использовать printf

printf '' > file