Как я могу создать пустой файл из командной строки?
Используйте 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_filetrue > /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/newfiletruncate --size 0 /tmp/new_filename.txtcp /dev/null /tmp/null_filetrue|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