Attention, s'il vous plaît:
Je ne demande pas comment créer un fichier à partir de la ligne de commande!
J'utilise touch
pour faire des fichiers depuis des années sans faire attention à ce que son objectif principal soit autre chose. Si l'on veut créer un fichier à partir de la ligne de commande, il y a tellement de possibilités:
touch foo.bar
> foo.bar
cat > foo.bar
echo -n > foo.bar
printf '' > foo.bar
Et je suis sûr qu'il y en a plus.
Mais le fait est qu'aucune des commandes ci-dessus n'est réellement conçue pour créer des fichiers. Par exemple, man touch
suggère que cette commande sert à modifier les horodatages des fichiers. Pourquoi un système d'exploitation aussi complet qu'Unix (ou Linux) n'a-t-il pas une commande uniquement conçue pour créer des fichiers?
bash
shell
command-line
files
Pouya
la source
la source
cat
enation!more
quandless
fait plus que quoimore
!? Oudir
etls
. Mais je suis conscient des problèmes de compatibilité.more
est antérieure à la création deless
.less
a été créé spécifiquement pour combler les lacunes demore
.more
existe toujours pour des raisons de compatibilité descendante.dir
etls
sont, pour la plupart des intentions et des fins, le même exécutable - ils ne diffèrent que par une poignée d'octets. Un nouvel outil destiné spécifiquement pour la création de fichiers ferait moins que les outils existants, et en tant que tel , il serait une régression, et non une amélioration comme dans le cas deless
vsmore
.Réponses:
Je dirais parce qu'il n'est presque jamais nécessaire de créer un fichier vide que vous ne remplirez pas de contenu immédiatement sur la ligne de commande ou dans un script shell.
Il n'y a absolument aucun avantage à créer un fichier d'abord, puis à utiliser la redirection d'E / S pour écrire dans le fichier si vous pouvez le faire en une seule étape.
Dans les cas où vous voulez vraiment créer un fichier vide et le laisser, je dirais que
> "${file}"
cela ne pourrait pas être plus bref et plus élégant.TL; DR : Cela n'existe pas car la création de fichiers vides n'a le plus souvent aucune utilité, et dans les cas où il y en a déjà une myriade d'options disponibles pour atteindre cet objectif.
Sur une note latérale, l'utilisation
touch
ne fonctionne que si le fichier n'existe pas alors que les options utilisant la redirection tronqueront toujours le fichier, même s'il existe (donc techniquement, ces solutions ne sont pas identiques).> foo
est la méthode préférée car elle enregistre unfork
etecho -n
devrait être évitée en général car elle est très peu transférable.la source
>>
). Je faisais référence aux exemples donnés par OP en utilisant>
. L'ajout serait tout à fait inutile si ce que vous recherchez est la création de fichiers (ou NOOP out s'ils existent).noclobber
ne doit pas être défini afin d'>
écraser un fichier existant.alias rm='rm -i'
au lieu dealias rmi='rm -i'
est une mauvaise idée.> .file
sur une seule ligne de commande, le fera parfaitement bien sans le:
.La réponse d'Adrian Frühwirth est juste. Je voulais juste ajouter qu'il ya effectivement une commande spécifiquement écrite pour créer des fichiers:
mktemp
.Certes,
mktemp
le travail de n'est pas de créer un fichier avec un nom spécifique, c'est simplement de créer un fichier . Cependant, comme on vous l'a déjà dit, il existe de nombreuses façons plus efficaces et élégantes de créer des fichiers avec un nom donné que fournir une commande pour cela serait inutile.Cela dit, vous avez également
truncate
etfallocate
tous deux l'objectif essentiel est de créer des fichiers. Ils ont simplement une approche plus sophistiquée. Il n'y aura jamais un programme simple qui fait ce qu'il> file
fait, car il n'y a aucun moyen que ce soit mieux que> file
.la source
La plupart des outils shell de base ne sont pas conçus du tout pour un objectif très spécifique. La plupart des outils shell de base sont conçus uniquement pour interagir avec d'autres pour atteindre votre objectif. Ou peut-être faut-il dire que la plupart des outils ne font qu'une chose très fondamentale, quelle que soit la façon dont ils peuvent être combinés pour atteindre un objectif.
Cela crée un fichier vide. Ou tronque un fichier existant comme vous le souhaitez. Vous pouvez:
pour éviter toute possibilité de ce dernier cas, sauf si vous:
Vous pouvez obtenir un comportement similaire à celui
touch
de:Sauf que
:
cela ne mettra pas à jour le modtime d'un fichier car il n'est pas modifié.DEMO
SORTIE
NE TOUCHEZ PAS
SORTIE
la source
\n
à la fin de la ligne. Essayezecho -n >echo-n.file
(taille = 0) etecho -e >echo-e.file
(taille = 1)cat
. Pourquoi avoir une commande pour afficher un fichier, alors que vous pouvez faire une commande pour concaténer plusieurs fichiers en sortie standard?L'utilitaire
install
est en fait conçu pour créer des fichiers! Vous pouvez passer le contenu du fichier via/dev/stdin
(dans la plupart des cas, cependant, sur la plupart des versions de Linux, cela nécessite qu'il/proc
soit monté) ou fournir un autre fichier source. Vous pouvez définir la propriété et les autorisations.comme un exemple stupide.
la source