J'ai un fichier appelé error.log sur mon serveur que je dois fréquemment tronquer. J'ai les autorisations rw pour le fichier. Ouverture du fichier dans vi> suppression de tout le contenu> sauvegarde des travaux (évidemment). Mais quand j'essaye le dessous
cat /dev/null > error.log
Je reçois le message
File already exists.
De toute évidence, il existe une sorte de configuration effectuée sur le serveur pour éviter le remplacement accidentel des fichiers. Quelqu'un peut-il dire comment "tronquer" le fichier en une seule commande?
linux
file
command-line
Sumeet Pareek
la source
la source
Réponses:
Vous avez le
noclobber
jeu d'options. L'erreur semble provenir de csh, vous feriez donc:Si je me trompe et que vous utilisez bash, vous devriez faire:
dans bash, vous pouvez également raccourcir cela pour:
la source
File exists
erreur similaire tandis que bash donne l'cannot overwrite existing file
erreur très différente .>file
ne fonctionne pas.> file
et>| file
?noclobber
défini l' option, la tentative de redirection vers un fichier existant échoue. Pour remplacer la redirection spécifique tout en laissant noclobber activé, vous pouvez utiliser>|
Vous pouvez également utiliser la fonction tronquer
si l'autorisation est refusée, utilisez sudo
Aide / Manuel: homme tronqué
testé sur ubuntu Linux
la source
Ce sera suffisant pour définir la taille du fichier sur 0:
la source
le mérite revient à mon collègue principal pour ceci:
Cela ne cassera pas les fichiers journaux, vous pouvez donc même l'utiliser sur syslog, par exemple.
la source
:
est une commande sans effet (presque un commentaire), puis>
est la redirection comme d'habitude, donc cela ne fait que rediriger le manque de sortie d'une commande qui ne fait rien dans le fichier. Si noclobber est activé, vous avez besoin de:>| filename
(bash) (et je suppose que:>! filename
dans csh en supposant que csh a:
).peut fonctionner aussi bien
la source
dd
rien ne serait encore mieux que le clair lisiblefalse
?Puisque sudo ne fonctionnera pas avec la redirection
>
, j'aime latee
commande à cet effetla source
error.log
, si cela est déjà accessible en écriture, il n'est pas nécessaire de sudo. Je pense que l'autre problème est que vous passez la commande en tant qu'argument de chaîne àsh
, je ne sais pas comment cela est géré en interne mais c'est une autre couche de complexité / redirection ajoutéeecho ""
cela ajoutera une nouvelle ligne. Vous pouvez utiliserecho -n ""
pour supprimer la nouvelle ligneN'importe qui peut essayer cette commande pour tronquer n'importe quel fichier dans le système Linux
Cela fonctionnera sûrement dans n'importe quel format:
la source
J'aime ça:
cp /dev/null file
la source
Vous pouvez également essayer:
echo -n > /my/file
la source
noclobber
, puis demandez-vous si votre réponse a du sens.