concaténer des fichiers, y compris le chemin dans l'en-tête - le chemin contient des espaces


2

Je dois concaténer un certain nombre de fichiers dans une structure de répertoires contenant des espaces dans les noms de dossiers qui ressemblent à ceci: ./CH 0000100014 / A10 / 11XT / 11xt # 001.csv

find . -name "*.csv" -type f -print0 | xargs -0  cat > allmycsv.txt

fait le travail, mais maintenant je dois inclure les informations contenues dans le chemin, c’est- CH 0000100014/A10/11XTà- dire comme en-tête de chaque fichier d’entrée dans cat.

find . -name "*.csv" -type f -print0 | xargs -0 -I % sh -c 'echo %; cat %' >allmycsv.txt

ferait le travail, si je n'avais pas d'espaces dans le chemin, mais dans mon cas, chat ne s'entend pas avec l'espace dans le nom du chemin. y a t-il une sortie?

À la vôtre, E

PS je travaille sur bash sur OSX

Réponses:


1

Vous pouvez lire la liste de fichiers en boucle while (voir BashFAQ # 020 ):

find . -name "*.csv" -type f -print0 | while IFS= read -d $'\0' -r file ; do
    echo "$file"
    cat "$file"
done >allmycsv.txt

Vous pouvez aussi simplement utiliser à la -d ''place de -d $'\0', ce qui fonctionne soit parce bashque la chaîne vide est un cas spécial, soit parce que le "premier" caractère de la chaîne null est le terminateur à octet nul (je ne sais pas lequel).
Chepner

Je vous remercie! Fonctionne à merveille et, en tout cas, un excellent wiki que vous m'avez indiqué.
manolo

0

Essayez d’ajouter des guillemets autour des caractères%:

sh -c 'echo " % " ; chat " % " '


À la vôtre Scott, belles et propres oeuvres perfekt
manolo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.