La forme abrégée peut être liée au shell, tandis que touch est une commande autonome. Par conséquent, la forme abrégée dépend du shell que vous utilisez (et les utilisateurs ont de fortes préférences dans ce domaine) car ils ne fournissent peut-être pas tous le raccourci. touchêtre autonome fonctionnera de la même manière, quoi que vous utilisiez.
Le premier exemple doit être édité sur : >> fileou même de >> filemanière à avoir le même effet, c’est-à-dire à NE PAS détruire le contenu du fichier.
user000001
2
touchmet principalement à jour le mtime. Il ne vide pas un fichier existant contrairement à >.
rexkogitans
2
Ni la commande "crée un fichier vide"; ils n'ont ce résultat que si le fichier n'existe pas encore. Pour garantir un fichier vide, il vous faut > file.
Alexis
Réponses:
47
Vous n'avez même pas besoin d'utiliser :; vous pouvez simplement > file(au moins dans bash; d'autres coquilles peuvent se comporter différemment).
En termes pratiques, il n'y a pas de réelle différence ici (même si le minuscule frais supplémentaire lié au fait d'appeler /bin/touchest une chose).
touchToutefois, vous pouvez également modifier les horodatages d’un fichier existant sans en modifier ni en effacer le contenu; plus loin, > filesupprimera tout filece qui existe déjà. Cela peut être contourné en utilisant plutôt >> file.
Une autre différence touchest que vous pouvez lui faire créer (ou mettre à jour l'horodatage sur) plusieurs fichiers à la fois (par exemple touch foo bar baz quux) avec une syntaxe plus succincte qu'avec la redirection, chaque fichier nécessitant sa propre redirection (par exemple >foo >bar >baz >quux).
Utilisant touch:
$ touch foo; stat -x foo; sleep 2; touch foo; stat -x fooFile:"foo"Size:0FileType:RegularFileMode:(0644/-rw-r--r--)Uid:(991148597/redacted)Gid:(1640268302/redacted)Device:1,5Inode:8597208698Links:1Access:FriMay2510:55:192018Modify:FriMay2510:55:192018Change:FriMay2510:55:192018File:"foo"Size:0FileType:RegularFileMode:(0644/-rw-r--r--)Uid:(991148597/redacted)Gid:(1640268302/redacted)Device:1,5Inode:8597208698Links:1Access:FriMay2510:55:212018Modify:FriMay2510:55:212018Change:FriMay2510:55:212018
Utilisation de la redirection:
$ > foo; stat -x foo; sleep 2;>> foo; stat -x foo
File:"foo"Size:0FileType:RegularFileMode:(0644/-rw-r--r--)Uid:(991148597/redacted)Gid:(1640268302/redacted)Device:1,5Inode:8597208698Links:1Access:FriMay2510:55:212018Modify:FriMay2510:56:252018Change:FriMay2510:56:252018File:"foo"Size:0FileType:RegularFileMode:(0644/-rw-r--r--)Uid:(991148597/redacted)Gid:(1640268302/redacted)Device:1,5Inode:8597208698Links:1Access:FriMay2510:55:212018Modify:FriMay2510:56:252018Change:FriMay2510:56:252018
Il semble que >> filene mettra pas à jour l'heure de modification. Pas ce que recherche OP, mais je voulais juste souligner que cela ne semble pas être une alternative complète au toucher.
Jesse_b
2
Puisque la question ne spécifie pas un shell particulier. Il peut être intéressant de > filenoter que in zsh est équivalent à cat > file, non : > file.
JoL
Aussi, tcsh le permet : > file, mais commet une erreur > file. Peut-être que l’équivalence de > fileto : > fileest limitée à la bourne shell et à bash?
JoL
+1 pour la rigueur, notez toutefois que plusieurs obus traditionnels (je dirais même deviner tout ou la plupart des coquilles parce que la plus simple mise en œuvre serait naturellement la cause que cela fonctionne comme un effet secondaire), vous pouvez toucher plusieurs fichiers en utilisant la redirection du shell: : >foo >barou le : >>foo >>barseront touchez à la fois fooet bar.
mtraceur
Seulement pour être pédant en raison du contexte de la question réelle ici, mais : >foo >barne sera pas touchles fichiers; il va rediriger la sortie (null) de :dans les fichiers. touchtoucherait les fichiers. (:
DopeGhoti
32
Parce que vous pouvez avoir touchplusieurs fichiers en une fois sans avoir à saisir des caractères spéciaux supplémentaires. Cela inclut des éléments tels que l’agrandissement de l’attelle, par exemple touch file{1,2,3,4}.
Un autre problème est que lorsque vous écrivez un tutoriel, il est assez important de réaliser que vos lecteurs ne sont probablement pas très au courant du sujet. Une simple commande peut être beaucoup plus compréhensible qu'une combinaison étrange de caractères autres que des lettres. Je pense il y a un certain nombre d'utilisateurs de shell occasionnels qui ne savent pas ce qui :est, pour la simple raison qu'il n'a pas vraiment faire quoi que ce soit. De même pour un simple > foosans commande: même si vous savez ce qu'est une redirection, une redirection sans source peut ne pas être intuitive.
De plus, ici, sur unix.se, nous écrivons souvent des exemples de commandes avec le signe dollar en tête pour indiquer l'invite. Les caractères spéciaux au début de la ligne peuvent être confondus avec cela. (Notez que certains systèmes et shells sont utilisés >dans le cadre de l'invite par défaut.)
Et si la commande n'est pas complètement comprise, il y a toujours un "contact humain". Je doute que "man:> file" puisse renvoyer quoi que ce soit d’utile :-) De plus, les invites WRT, certaines (peut-être la plupart) vous permettent de définir l’invite comme bon vous semble. Mine affiche le nom du système (car j'utilise beaucoup de xterms distants) et le répertoire en cours, et est défini sur des couleurs différentes pour différents systèmes.
jamesqf
1
@jamesqf, yep. Maintenant, bien sûr, il y a aussi help :ou tout ce que votre shell a pour documentation. Mais pour cela, il faut reconnaître :qu’il s’agit d’une commande en soi, se rappeler que tout n’a pas de page de manuel et, enfin, pouvoir trouver :la documentation. La dernière partie peut être assez difficile. : D
ilkkachu
@jamesqf, et oui, je voulais surtout dire le dernier caractère de l'invite par défaut.
ilkkachu
1
+1 pour signaler les aspects d' intuition et de non-être-une-obscure-construction.
mtraceur
@ilkkachu: Ouais. Trouver des points dans la documentation n'est pas si difficile: trouver celui qui ne se limite pas à la ponctuation est une autre affaire :-)
jamesqf
18
Eh bien, pour moi, la principale raison est la lisibilité. Avec touch filevous, vous savez ce qui se passe, même une personne peu instruite en scripts shell sait ce qui se passe. Et sinon, c'est facile à faire man touchet à voir:
A FILE argument that does not exist is created empty
Avec les éléments cryptiques tels que :et >, il est plus difficile de savoir ce qui se passe, et comme il n'y a pas de réel avantage, il n'est pas nécessaire de l'utiliser.
Imaginez que vous recherchiez l'un de vos anciens scripts shell dont vous vous souviendrez seulement qu'un fichier de marqueur est créé dans / tmp. Il est facile de grep tous vos fichiers * .sh pour le mot "touch". Grepping pour deux points produira à la place de nombreux faux positifs si vous ne savez pas quel nom de fichier exact rechercher.
touch
être autonome fonctionnera de la même manière, quoi que vous utilisiez.: >> file
ou même de>> file
manière à avoir le même effet, c’est-à-dire à NE PAS détruire le contenu du fichier.touch
met principalement à jour le mtime. Il ne vide pas un fichier existant contrairement à>
.> file
.Réponses:
Vous n'avez même pas besoin d'utiliser
:
; vous pouvez simplement> file
(au moins dansbash
; d'autres coquilles peuvent se comporter différemment).En termes pratiques, il n'y a pas de réelle différence ici (même si le minuscule frais supplémentaire lié au fait d'appeler
/bin/touch
est une chose).touch
Toutefois, vous pouvez également modifier les horodatages d’un fichier existant sans en modifier ni en effacer le contenu; plus loin,> file
supprimera toutfile
ce qui existe déjà. Cela peut être contourné en utilisant plutôt>> file
.Une autre différence
touch
est que vous pouvez lui faire créer (ou mettre à jour l'horodatage sur) plusieurs fichiers à la fois (par exempletouch foo bar baz quux
) avec une syntaxe plus succincte qu'avec la redirection, chaque fichier nécessitant sa propre redirection (par exemple>foo >bar >baz >quux
).Utilisant
touch
:Utilisation de la redirection:
la source
>> file
ne mettra pas à jour l'heure de modification. Pas ce que recherche OP, mais je voulais juste souligner que cela ne semble pas être une alternative complète au toucher.> file
noter que in zsh est équivalent àcat > file
, non: > file
.: > file
, mais commet une erreur> file
. Peut-être que l’équivalence de> file
to: > file
est limitée à la bourne shell et à bash?: >foo >bar
ou le: >>foo >>bar
seront touchez à la foisfoo
etbar
.: >foo >bar
ne sera pastouch
les fichiers; il va rediriger la sortie (null) de:
dans les fichiers.touch
toucherait les fichiers. (:Parce que vous pouvez avoir
touch
plusieurs fichiers en une fois sans avoir à saisir des caractères spéciaux supplémentaires. Cela inclut des éléments tels que l’agrandissement de l’attelle, par exempletouch file{1,2,3,4}
.Un autre problème est que lorsque vous écrivez un tutoriel, il est assez important de réaliser que vos lecteurs ne sont probablement pas très au courant du sujet. Une simple commande peut être beaucoup plus compréhensible qu'une combinaison étrange de caractères autres que des lettres. Je pense il y a un certain nombre d'utilisateurs de shell occasionnels qui ne savent pas ce qui
:
est, pour la simple raison qu'il n'a pas vraiment faire quoi que ce soit. De même pour un simple> foo
sans commande: même si vous savez ce qu'est une redirection, une redirection sans source peut ne pas être intuitive.De plus, ici, sur unix.se, nous écrivons souvent des exemples de commandes avec le signe dollar en tête pour indiquer l'invite. Les caractères spéciaux au début de la ligne peuvent être confondus avec cela. (Notez que certains systèmes et shells sont utilisés
>
dans le cadre de l'invite par défaut.)la source
help :
ou tout ce que votre shell a pour documentation. Mais pour cela, il faut reconnaître:
qu’il s’agit d’une commande en soi, se rappeler que tout n’a pas de page de manuel et, enfin, pouvoir trouver:
la documentation. La dernière partie peut être assez difficile. : DEh bien, pour moi, la principale raison est la lisibilité. Avec
touch file
vous, vous savez ce qui se passe, même une personne peu instruite en scripts shell sait ce qui se passe. Et sinon, c'est facile à faireman touch
et à voir:Avec les éléments cryptiques tels que
:
et>
, il est plus difficile de savoir ce qui se passe, et comme il n'y a pas de réel avantage, il n'est pas nécessaire de l'utiliser.la source
Imaginez que vous recherchiez l'un de vos anciens scripts shell dont vous vous souviendrez seulement qu'un fichier de marqueur est créé dans / tmp. Il est facile de grep tous vos fichiers * .sh pour le mot "touch". Grepping pour deux points produira à la place de nombreux faux positifs si vous ne savez pas quel nom de fichier exact rechercher.
la source