csv 파일에 쓸 때 파일 이름이 분할됨

csv 파일에 쓸 때 파일 이름이 분할됨

터미널 폴더에 디렉토리가 있습니다. 저는 MobaXterm을 사용하고 있습니다. 이 디렉토리에는 많은 파일이 있습니다. 파일 이름이 매우 길고 일부 잘못된 문자가 포함되어 있습니다. 예시 파일 이름은 다음과 같습니다."2015년 이후 개발 의제에 관한 사무총장 고위급 패널 공동의장 3인(인도네시아, 라이베리아, 영국) - Media Stakeout-1861343067001.m4a". 다음 명령줄을 사용하여 파일 이름을 csv 파일에 쓰고 있으며 지금까지 작동했습니다.

dir$ find . -type f  > names.csv

그런데 이번에는 파일명이 더 이상 하나의 열이 아닌 여러 열로 나누어져 있습니다.

여기에 이미지 설명을 입력하세요.

A열에 전체 이름을 입력하고 싶습니다. 쉼표를 포함하여 원본 파일 이름을 쓰고 싶습니다. 동일한 명령으로 이전 데이터세트에 대해 쉼표가 포함된 파일 이름을 쓸 수 있었지만 유일한 차이점은 이러한 파일 이름이 이 파일 이름보다 짧다는 것입니다.

어떻게 고치나요?

답변1

Linux에서 GNU find에는 -printf파일 이름을 지정된 형식으로 인쇄하여 CSV로 가져오는 옵션이 있습니다. 예를 들어 파일 이름을 큰따옴표로 묶을 수 있습니다.

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

답변2

CSV는 다음을 의미합니다.쉼표로 구분된 값. 스프레드시트는 파일을 읽을 때 쉼표를 필드 구분 기호로 해석합니다. 쉼표를 밑줄과 같은 다른 구분 기호로 바꾸십시오.,그러므로

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

필드 1은 가져올 때 분할되지 않습니다.

답변3

CSV에는 다양한 종류가 있지만 sed를 사용하는 RFC 4180 호환 솔루션은 다음과 같습니다.

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

"이는 with 인스턴스를 대체 ""하고 비어 있지 않은 줄을 큰따옴표로 묶습니다.

답변4

파일 이름 길이는 여기서 중요한 역할을 하지 않지만 가져오기 엔진 기본 구분 기호는 역할을 합니다. 파일명에 한 번도 사용되지 않은 문자를 선택하여 CVS 구분자로 사용하세요. 선택 항목이 §(부분 표기법)이고 명령이 다음과 같다고 가정해 보겠습니다 find.

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

또는 시작점 없이 파일 이름을 얻으려면 다음을 수행하십시오.

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

이제 csv를 가져올 때 §를 구분 기호로 지정하세요. 여기에 이미지 설명을 입력하세요.

관련 정보