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.
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 -printf
opçã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 find
comando 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