Внимание, пожалуйста:
Я не спрашиваю, как сделать файл из командной строки!
Я использовал touch
для создания файлов в течение многих лет, не обращая внимания на то, что его основная цель заключается в другом. Если кто-то хочет создать файл из командной строки, существует так много возможностей:
touch foo.bar
> foo.bar
cat > foo.bar
echo -n > foo.bar
printf '' > foo.bar
И я уверен, что есть еще.
Но дело в том, что ни одна из приведенных выше команд не предназначена для создания файлов. Например, man touch
предполагает , что эта команда предназначена для изменения временных меток файла. Почему в операционной системе, такой как Unix (или Linux), нет команды, предназначенной исключительно для создания файлов?
bash
shell
command-line
files
Pouya
источник
источник
cat
разговора!more
когдаless
делает больше, чемmore
делать? Илиdir
иls
. Хотя я знаю о проблемах совместимости.more
предшествует созданиюless
.less
был создан специально для устранения недостатковmore
.more
все еще существует по причинам обратной совместимости.dir
иls
, для большинства намерений и целей, являются одним и тем же исполняемым файлом - они отличаются только несколькими байтами. Новый инструмент , предназначенный специально для создания файлов будет делать меньше , чем существующие инструменты, и, таким образом, было бы регресс, а не улучшение , как и в случаеless
противmore
.Ответы:
Я бы сказал, потому что вряд ли когда-либо нужно создавать пустой файл, который вы не будете заполнять контентом сразу в командной строке или в сценариях оболочки.
Совершенно бесполезно сначала создавать файл, а затем использовать перенаправление ввода / вывода для записи в файл, если вы можете сделать это за один шаг.
В тех случаях, когда вы действительно хотите создать пустой файл и оставить его, я бы сказал, что это
> "${file}"
не может быть более коротким и элегантным.TL; DR : его не существует, потому что создание пустых файлов чаще всего бесполезно, и в тех случаях, когда оно есть, уже есть множество вариантов, доступных для достижения этой цели.
С другой стороны, использование
touch
работает только в том случае, если файл не существует, тогда как параметры, использующие перенаправление, всегда будут обрезать файл, даже если он существует (так что технически эти решения не идентичны).> foo
является предпочтительным методом, поскольку он экономит,fork
и егоecho -n
следует избегать в целом, так как он очень непереносим.источник
>>
). Я имел в виду примеры, приведенные OP с использованием>
. Добавление будет бесполезным, если вы создаете файлы (или NOOP, если они существуют).noclobber
это не нужно устанавливать, чтобы>
перезаписать существующий файл.alias rm='rm -i'
вместоalias rmi='rm -i'
- плохая идея.> .file
в командной строке, сделает это без проблем:
.Ответ Адриана Фрювирта правильный. Я просто хотел бы добавить , что есть на самом деле команда специально написано для создания файлов:
mktemp
.Конечно,
mktemp
задача не в том, чтобы создать файл с определенным именем, а в том, чтобы просто создать файл . Однако, как вы уже сказали, существует множество более эффективных и элегантных способов создания файлов с заданным именем, поэтому указание команды для этого было бы бессмысленным.Тем не менее, у вас также есть,
truncate
иfallocate
оба из которых основной целью является создание файлов. У них просто более сложный подход. Никогда не будет простой программы, которая делает то, что> file
делает, потому что нет способа, которым она будет лучше, чем> file
.источник
Большинство основных инструментов оболочки вообще не предназначены для каких-либо конкретных целей. Большинство основных инструментов оболочки предназначены только для взаимодействия с другими для достижения вашей цели. Или, может быть, следует сказать, что большинство инструментов делают только одну очень простую вещь, независимо от того, как они могут быть объединены для достижения цели.
Это создает пустой файл. Или обрезает существующий файл, как вы хотите. Вы можете:
чтобы избежать любой возможности в последнем случае, если вы:
Вы можете получить похожее поведение
touch
с:За исключением того, что
:
не будет обновлять мод времени файла, потому что он не изменен.DEMO
ВЫХОД
НЕ ТРОГАТЬ
ВЫХОД
источник
\n
в конце строки. Попробуйтеecho -n >echo-n.file
(размер = 0) иecho -e >echo-e.file
(размер = 1)cat
. Зачем нужна команда для отображения одного файла, если вы можете сделать одну команду для объединения нескольких файлов в стандартный вывод?Утилита
install
на самом деле предназначена для создания файлов! Вы можете передать содержимое файла через/dev/stdin
(но в большинстве случаев, однако, в большинстве версий Linux это требует/proc
монтирования) или предоставить другой исходный файл. Вы можете установить владельца и разрешения.как глупый пример.
источник