Как я могу создать пустой файл из командной строки?
Используйте 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