O nome do arquivo é dividido ao escrever em um arquivo csv

O nome do arquivo é dividido ao escrever em um arquivo csv

Eu tenho um diretório na pasta do terminal. Estou usando o MobaXterm. Este diretório contém um grande número de arquivos. Os nomes dos arquivos são longos e possuem alguns caracteres ilegais. Um exemplo de nome de arquivo é"Os três copresidentes (Indonésia, Libéria, Reino Unido) do Painel de Alto Nível do Secretário-Geral sobre a Agenda de Desenvolvimento Pós-2015 - Media Stakeout-1861343067001.m4a". Escrevo os nomes dos arquivos em um arquivo csv usando a seguinte linha de comando e estava funcionando até agora.

dir$ find . -type f  > names.csv

Mas desta vez, em vez de uma coluna, o nome do arquivo é dividido em várias colunas.

insira a descrição da imagem aqui

Quero o nome completo apenas na coluna A. Quero escrever os nomes dos arquivos originais, incluindo as vírgulas. O mesmo comando foi capaz de escrever os nomes dos arquivos com vírgulas para meus conjuntos de dados anteriores, a única diferença é que esses nomes de arquivos eram mais curtos que este.

Como posso consertar isso?

Responder1

No Linux, GNU find possui uma -printfopção que irá imprimir o nome do arquivo com um determinado formato; para importar para CSV, você pode colocar o nome do arquivo entre aspas duplas, algo como:

find . -type f -printf '"%p"\n'

Responder2

CSV significaValor separado por vírgula. Quando a planilha lê o arquivo, ela interpreta as vírgulas como divisores de campo. Substitua as vírgulas por algum outro separador, como um sublinhado, portr, assim

$ tr ',' '-_' < input.csv | tr -d '"' 

Quando você importá-lo, o Campo Um não será dividido.

Responder3

Existem diferentes sabores de CSV, mas uma solução compatível com RFC 4180 usando sed:

find . -type f | sed 's/"/""/g;s/\(.\+\)/"\1"/'

Isso substituirá as instâncias de "with ""e encapsulará linhas não vazias com aspas duplas.

Responder4

O comprimento do nome do arquivo não tem efeito aqui, mas o separador padrão do mecanismo de importação. Escolha um caractere nunca usado em seus nomes de arquivos e use-o como separador CVS. Vamos supor que esta escolha seja § (sinal de seção). Seu findcomando seria:

find . -type f -printf '§%p§\n' > names.csv

ou se você deseja obter o nome do arquivo sem o ponto inicial:

find . -type f -printf '§%P§\n' > names.csv

Agora, ao importar seu csv, especifique § como separador insira a descrição da imagem aqui

informação relacionada