Écrire dans un fichier, mais l'écraser s'il existe
252
echo "text">>'Users/Name/Desktop/TheAccount.txt'
Comment puis-je le faire pour qu'il crée le fichier s'il n'existe pas, mais l'écrase s'il existe déjà. À l'heure actuelle, ce script est simplement ajouté.
bien .. c'est génial. J'ai reconnu> un peu plus tôt que >>.
Jokester
Réponses:
411
Un peu de compréhension du fonctionnement des tuyaux * nix serait utile.
En bref, l' >>opérateur de redirection ajoutera des lignes à la fin du fichier spécifié, où-comme le simple supérieur à >videra et écrasera le fichier.
@BrDaHa Comment puis-je également rediriger stderr avec> | ainsi que? J'ai essayé &> | mais ça n'a pas marché.
Tu Bui
@TuBui ne sais pas pourquoi cela ne fonctionne pas pour vous. Sur ma machine &>| filefonctionne. Quel shell et quelle version utilisez-vous? @stimulate for zsh both should work , for bash it's only>|
Griddo
@Griddo mon shell est la version bash 4.3.48 (1) -release. echo "aaa" &>| test.txtentraîne une erreur -bash: syntax error near unexpected token |. Mon noclobber est activé.
Tu Bui
1
@TuBui Apparemment, je ne testais pas correctement. Cela ne fonctionne pas non plus pour moi ... mais la documentation n'indique pas que cela devrait être possible de toute façon. Vous devez probablement vous en tenir à echo "aaa" >| test.txt 2>&1ou utiliser un autre shell.
Griddo
40
Malgré NylonSmilela réponse de , qui est "en quelque sorte" correcte .. Je n'ai pas pu écraser les fichiers de cette manière ..
echo "i know about Pipes, girlfriend" > thatAnswer
zsh: file exists: thatAnswer
pour résoudre mes problèmes .. je devais utiliser ... >!, á la ..
Notez simplement que si vous souhaitez rediriger à la fois std :: cerr et std :: cout vers un fichier alors que vous avez défini noclobber (c'est-à-dire set -o noclobber), vous pouvez utiliser le code:
Réponses:
Un peu de compréhension du fonctionnement des tuyaux * nix serait utile.
En bref, l'
>>
opérateur de redirection ajoutera des lignes à la fin du fichier spécifié, où-comme le simple supérieur à>
videra et écrasera le fichier.la source
-bash: TheAccount.txt: cannot overwrite existing file
.>
et>>
sont les opérateurs de redirection de sortie . L'opérateur de tuyaux est|
.>|
pour forcer l'écrasement existantDans Bash, si vous avez défini noclobber à la
set -o noclobber
, vous utilisez la syntaxe>|
Par exemple:
echo "some text" >| existing_file
Cela fonctionne également si le fichier n'existe pas encore
Vérifiez si le noclobber est défini avec:
set -o | grep noclobber
Pour une explication plus détaillée sur ce type d'opérateur spécial, voir cet article
Pour une liste plus exhaustive des opérateurs de redirection, reportez-vous à cet article
la source
&>| file
fonctionne. Quel shell et quelle version utilisez-vous? @stimulate for zsh both should work , for bash it's only>|
echo "aaa" &>| test.txt
entraîne une erreur-bash: syntax error near unexpected token |
. Mon noclobber est activé.echo "aaa" >| test.txt 2>&1
ou utiliser un autre shell.Malgré
NylonSmile
la réponse de , qui est "en quelque sorte" correcte .. Je n'ai pas pu écraser les fichiers de cette manière ..echo "i know about Pipes, girlfriend" > thatAnswer
pour résoudre mes problèmes .. je devais utiliser ...
>!
, á la ..Évidemment, soyez prudent avec cela ...
la source
NOCLOBBER
défini l' option zsh non par défaut . Utilisezsetopt clobber
pour restaurer le comportement par défaut.Si votre environnement ne permet pas d'écraser avec
>
, utilisez plutôt pipe|
ettee
comme suit:Notez que cela s'imprimera également sur la sortie standard. Si cela n'est pas souhaité, vous pouvez rediriger la sortie
/dev/null
comme suit:la source
la source
Notez simplement que si vous souhaitez rediriger à la fois std :: cerr et std :: cout vers un fichier alors que vous avez défini noclobber (c'est-à-dire
set -o noclobber
), vous pouvez utiliser le code:Plus d'informations à ce sujet peuvent être consultées sur https://stackoverflow.com/a/876242 .
Aussi la réponse de @ TuBui à cette réponse sur la réponse @BrDaHa fournie ci-dessus le 9 août 18 à 9:34.
la source
Pour remplacer le contenu d'un fichier dans un autre fichier. utiliser chat par exemple.
Maintenant, pour remplacer foobar, nous pouvons utiliser une commande cat comme ci-dessous
la source
>>
ajoute, pas l'écrasementSi vous avez une sortie qui peut contenir des erreurs, vous pouvez utiliser une esperluette et une plus grande que, comme suit:
my_task &> 'Users/Name/Desktop/task_output.log'
cela redirigera à la fois stderr et stdout vers le fichier journal (au lieu de stdout uniquement).la source