Écrire un mot dans chaque fichier txt d'un dossier

10

Comment puis-je écrire le mot "chat" dans chaque fichier .txt d'un dossier?

Qubix
la source

Réponses:

20

Un simple pour fera le travail:

for i in ./*.txt; do echo 'cat' >> "$i"; done;

Cela obtiendra une liste de tous les fichiers txt dans le répertoire en cours, les boucle à travers eux et les echocat dedans (ajoute au contenu). vous pouvez passer >>à >, pour écraser le contenu des fichiers avec cat.

Vous pouvez également utiliser teepour rediriger un flux vers plusieurs fichiers.

À ajouter:

echo "cat" | tee -a *.txt

Pour remplacer:

echo "cat" | tee *.txt
Ravexina
la source
quel est le con à utiliser echo "cat" >> *.txt?
hytromo
4
@hakermania qui devrait échouer avecambiguous redirect
Zanna
13

Si les fichiers ne sont pas vides, vous pouvez les utiliser sedsans boucle. Pour ajouter catau début:

sed 'i\cat' *.txt

Pour ajouter à la fin:

sed 'a\cat' *.txt

Pour ajouter après la deuxième ligne:

sed '2 a\cat' *.txt

Pour ajouter des lignes avant avec fooen elles:

sed '/foo/ i\cat' *.txt

Cependant, cela ne fonctionne pas sur les fichiers vides. Une sorte de bug.

(Pour écrire réellement les fichiers après avoir testé vous avez besoin de l' -ioption: sed -i 'a\cat' *.txt)

Zanna
la source
Je déteste sed :)), car il y a beaucoup de choses que vous pouvez faire avec et je ne suis pas au courant :))
Ravexina
@Ravexina sedest ma confiture;)
Zanna
pourquoi 'i\cat'utilise la barre oblique inverse au lieu de la barre oblique?
phuclv
@ LưuVĩnhPhúc la barre oblique inverse est facultative en fait, vous pouvez également mettre 'icat'ou i cat. Le backslash est conventionnel je crois. Vous ne pouvez pas utiliser forwardslash - il sera littéralement inséré
Zanna
4

Approche Python:

#!/usr/bin/env python
import sys

for i in sys.argv[1:]:
    with open(i,'w') as fd:
        fd.write("cat\n")
  • il utilise le sysmodule pour parcourir les arguments de la ligne de commande
  • chaque argument de ligne de commande sera ouvert en tant que fichier d'écriture
  • "cat" avec newline sera écrit dans un fichier avant de passer à la prochaine

L'utilisation serait as ./add_cat.py *.txt, qui fonctionnerait sur tous les .txtfichiers du répertoire de travail actuel. L'amélioration pourrait inclure l'utilisation de l'argument de ligne de commande # 1 comme chaîne pour écrire au lieu de coder en dur "cat".

Sergiy Kolodyazhnyy
la source