web-dev-qa-db-fra.com

Supprimer une fois les lignes de plusieurs fichiers d'un dossier (éviter les boucles infinies)

J'ai plusieurs fichiers dans un dossier et je veux supprimer les premières lignes de chacun d'entre eux. Si je fais ça:

sed -i.bak '1,2000d' *.dat

les 2000 premières lignes sont supprimées, mais le nom du fichier est toujours de la forme *.dat et les 2 000 lignes suivantes sont également supprimées, et ainsi de suite jusqu'à ce que le fichier soit vide. Comment puis-je réparer cela? De préférence sans script compliqué? Il y a trop de fichiers pour simplement lister tous les noms de fichiers, ils sont trop compliqués pour les taper tous.

4
Apatura

Vous pouvez utiliser une boucle for pour que la commande soit exécutée pour chaque fichier exactement une fois:

for file in *.dat; do sed -i.bak '1,2000d' "$file"; done

Remarquez que -i.bak sauvegarde le fichier d'origine avec la fin de .bak.

4
chaos