concatena arquivos incluindo o caminho no cabeçalho - o caminho contém espaços

2

Eu tenho que concatenar um número de arquivos em uma estrutura de diretórios que contém espaços nos nomes das pastas com esta aparência: ./CH 0000100014 / A10 / 11XT / 11xt # 001.csv

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

faz o trabalho, mas agora preciso incluir as informações contidas no caminho, ou seja, CH 0000100014/A10/11XT como cabeçalho de cada arquivo de entrada para cat.

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

faria o trabalho, se eu não tivesse espaços no caminho, mas no meu caso, o gato não se dá bem com o espaço no nome do caminho. Existe uma saída?

Felicidades, E

P.S. Eu estou trabalhando no bash no OSX

    
por manolo 29.08.2012 / 21:07

2 respostas

1

Você pode ler a lista de arquivos em um loop while (veja BashFAQ # 020 ):

find . -name "*.csv" -type f -print0 | while IFS= read -d $'
find . -name "*.csv" -type f -print0 | while IFS= read -d $'%pre%' -r file ; do
    echo "$file"
    cat "$file"
done >allmycsv.txt
' -r file ; do echo "$file" cat "$file" done >allmycsv.txt
    
por 30.08.2012 / 02:20
0

Tente adicionar caracteres de aspas duplas em torno dos caracteres%:

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

    
por 29.08.2012 / 23:22