디렉터리의 파일 이름이 포함된 CSV 파일을 받으시겠습니까?

디렉터리의 파일 이름이 포함된 CSV 파일을 받으시겠습니까?

Excel에서 편집할 수 있는 CSV 파일로 저장하기 위해 디렉터리의 파일 이름을 내보내는 방법을 알아보려고 합니다. 디렉토리는 다음과 같습니다.

$ ls
Sample_38_41_1_A01  Sample_38_41_1_A11  Sample_38_41_1_B09
Sample_38_41_1_C07  Sample_38_41_1_D05  Sample_38_41_1_E03
Sample_38_41_1_F01

CSV 파일의 각 줄에 해당 디렉터리에 있는 파일 이름이 포함되기를 원합니다. Excel에서는 다음과 같이 표시됩니다.

A            B    C
1 Sample_38_41_1_A01
2 Sample_38_41_1_A11
3 Sample_38_41_1_B09 
4 Sample_38_41_1_C07 
5 Sample_38_41_1_D05
6 Sample_38_41_1_E03
7 Sample_38_41_1_F01
8 ...

답변1

예제 파일 이름에는 큰따옴표나 쉼표가 없으므로 해결 방법은 매우 간단합니다.

$ 'ls' > files.csv

여기에는 몇 가지 미묘함이 있습니다.

  1. ls별칭이 출력에 영향을 미치는 플래그를 추가하는 경우 명령을 인용해야 합니다. 예를 들어 -F파일 유형 기호를 추가하거나 -C다중 열 출력을 강제합니다. 이 클래스 이름은 최신 Unix 및 Unix 계열 시스템에서 매우 일반적입니다.

  2. 터미널 대신 파이프에 쓰는 경우 ls질문에 표시되는 다중 열 출력 대신 한 줄에 하나의 파일 이름이 인쇄됩니다. POSIX이 경우 단일 열 출력이 필요합니다., GNU 및 BSD를 ls준수합니다.

이 CSV 파일에는 헤더 행이 없지만 Excel에서 모든 CSV 리더가 이를 처리할 수 있는 것은 아닙니다.

하지만 만약 있다면 어떨까요?특수 문자?

큰따옴표와 쉼표는 CSV 파일의 특수 문자이므로 이러한 문자로 명명된 파일이 포함된 디렉터리에서 위 명령을 시도하면 유효한 CSV 파일을 얻을 수 없습니다.

이러한 상황을 처리하는 것은 그리 어렵지 않습니다.

먼저 쉼표만 포함할 수 있는 파일의 예를 살펴보겠습니다. Unix 명령 셸에서는 큰따옴표가 의미가 있으므로 파일 이름에 큰따옴표를 사용하는 것이 강력히 억제되므로 이는 더 일반적인 경우입니다.

$ 'ls' | sed -e 's/^/"/' -e 's/$/"/' > files.csv

이러한 sed문자열 대체 명령은 각 줄의 시작과 끝에 큰따옴표를 배치하여 CSV 판독기가 쉼표를 필드 구분 기호로 처리하지 못하도록 합니다.

동일한 목적을 달성하는 또 다른 방법은 다음과 같습니다.perl -ne 'chomp ; print "\"$_\"\n"'

파일 이름에 큰따옴표가 있으면 sed솔루션이 자연스럽게 확장됩니다.

$ 'ls' | sed -e 's/"/\\"/g' -e 's/^/"/' -e 's/$/"/' > files.csv

즉, 줄을 의미론적 따옴표로 묶기 전에 기존 큰따옴표 문자를 모두 이스케이프 처리합니다.

일부 CSV 리더는 큰따옴표 이스케이프를 다르게 처리하여 한 줄에 있는 두 개의 큰따옴표 문자를 리터럴 큰따옴표로 처리합니다.

$ 'ls' | sed -e 's/"/""/g' -e 's/^/"/' -e 's/$/"/' > files.csv

답변2

find * > yourfilename.csv훨씬 쉽게.

답변3

이것:

find ~/Music -maxdepth 3 -type f -iname "*.mp3" -printf "%h,%f,%CY-%Cm-%Cd %CT,%s,%u,%M\n" > mymusic.csv

관련 정보