8
votes

Comment automatiser Dos2unix en utilisant Script Shell?

J'ai un tas de fichiers XML dans un répertoire dont la commande DOS2UNIX est effectuée sur eux et que de nouveaux fichiers seront ajoutés de temps en temps. Je au lieu d'exécuter manuellement la commande Dos2unix sur chaque fichier à chaque fois que je voudrais tout automatiser avec un script. Je n'ai même jamais regardé un script shell dans ma vie mais je l'ai jusqu'à présent depuis ce que j'ai lu sur quelques tutoriels: xxx

Cependant, je continue à obtenir la sortie "usage" montrant la sortie . Je pense que le problème est que je n'attribue pas correctement le nom du nouveau fichier (FNAME).


0 commentaires

4 Réponses :


1
votes
$ echo /tmp/testFiles/1.xml | sed s@testFiles/@testFiles/converted/@
/tmp/testFiles/converted/1.xml

8 commentaires

Merci, mais pouvez-vous expliquer ce que cela fait: "$ (echo $ f | SED S @ testfiles / @ Testfiles / converti /)" Modifier: cette commande ne fonctionne pas. ERREUR: SED: Commande Garbed: S @ TestFiles / @ TestFiles / Converti /, Suppression de la commande SED donne une erreur: Impossible d'ouvrir les fichiers de fichier d'entrée


J'ajouterais simplement converti / avant ce nom du fichier.


Vous n'avez pas besoin sed pour cela. Vous pouvez le faire avec $ {f / testfiles \ // testfiles \ / converti \ /}


@RUSH: Cela ne fonctionne que dans BASH non dans la coquille de Bourne ( / bin / sh )


Les gars, je veux écraser les fichiers afin de déplacer les nouveaux fichiers vers un autre répertoire n'est pas un problème. La commande ci-dessus ne fonctionne pas. D'autres suggestions? Merci.


Qu'est-ce que cela signifie "ne fonctionne pas"? Quelle erreur obtenez-vous? Peut s'il vous plaît montrer le message d'erreur?


@ALansmith: Que diriez-vous de Recherche / TMP / TestFiles / -MaxDepth 1 -Type F -exec Dos2unix {} + (si vous ne voulez pas avoir une sauvegarde)?


@IGORCHUBIN: Cette question est étiquetée bash et n'est pas marquée sh ou shell ou posix-sh , donc je Pensez que les bismes sont acceptables.



2
votes

Si tous les fichiers sont dans un répertoire d'un (pas de récursivité), alors vous êtes presque là.

find /tmp/testFiles -name '*.xml' -exec dos2unix {} +


2 commentaires

Il ne stocke pas les résultats d'un globe élargi. Le GLOB n'est pas étendu à l'affectation.


@Denniswilliamson: Je vois que vous avez raison. J'ai supprimé ce commentaire, merci pour la correction.



8
votes

La raison pour laquelle vous obtenez un message d'utilisation est que Dos2unix code> ne prend pas les arguments supplémentaires que vous fournissez. Cependant, il acceptera de multiples noms de fichiers (également via Globs). Vous n'avez pas besoin d'une boucle à moins que vous traitez plus de fichiers que vous ne puissiez être accepté sur la ligne de commande.

find /tmp/testFiles -name '*.xml' -exec dos2unix {} +


0 commentaires

-1
votes

Il n'est pas clair que la mise en œuvre de DOS2UNIX vous utilisez. Différentes implémentations nécessitent des arguments différents. Il existe de nombreuses implémentations différentes autour de.

sur redhat / fedora / SUSE Linux, vous pouvez simplement taper xxx

sur Sunos, vous devez donner un nom de fichier d'entrée et de sortie, et la commande ci-dessus détruirait plusieurs de vos fichiers.


0 commentaires