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

manolo
la source

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
Gordon Davisson
la source
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 " % " '

Scott
la source
À la vôtre Scott, belles et propres oeuvres perfekt
manolo