하위 디렉터리의 파일을 csv 파일에 쓰고 Linux 명령줄의 상위 디렉터리에 저장합니다.

하위 디렉터리의 파일을 csv 파일에 쓰고 Linux 명령줄의 상위 디렉터리에 저장합니다.

"subdir"이라는 하위 디렉터리가 있는 "dir"이라는 디렉터리가 있습니다. 하위 디렉터리에 많은 파일이 있습니다. 이러한 파일 목록을 CSV 파일에 작성하고 Linux의 명령줄을 사용하여 "dir" 디렉터리에 저장하고 싶습니다. 내 코드는 csv 파일을 생성하지만 디렉터리 대신 하위 디렉터리에 저장합니다. 내가 뭘 잘못했나요? 나는 dir 디렉토리에 있습니다.

dir$ ls subdir >names.csv

답변1

더 간단한 대안으로 하위 디렉토리로 cd하고 사용할 수 있습니다.

printf "%s\n" * >../list.csv

이렇게 하면 쉼표 없이 개행으로 구분되고 개행으로 끝나는 목록이 제공됩니다. 열이 하나만 있는 퇴화된 csv 파일이라고 생각하면 됩니다.

숨겨진 파일(이름이 점으로 시작하는 파일)을 포함하려면 * .*고유한 대신 *. 및 .. 디렉터리 이름을 * .[^.]* ..?*사용하세요. 총:

printf "%s\n" *             >../list.csv   # For non-hidden files.
printf "%s\n" * .*          >../list.csv   # For all files.
printf "%s\n" * .[^.]* ..?* >../list.csv   # For all files but `.` and `..`.

그러나 Linux의 파일 이름 자체에 개행 문자가 포함될 수 있다는 점을 명심하십시오. 실제로 파일 이름에 대한 유일한 단일 바이트 구분 기호는 널 바이트입니다.


다음으로 인해 업데이트됨이 댓글:

공통 상위 디렉토리에 있는 별도의 파일로 분류하려는 숨겨진 콘텐츠가 없는 하위 디렉토리가 여러 개 있다고 가정해 보겠습니다. (모든 이름을 하나의 파일에 수집하는 것이 훨씬 더 짧습니다.이 우아한 솔루션. 그리고 솔직히 말해서 나는 당신의 댓글을 충분히 주의 깊게 읽지 않았습니다. ) 이는 해당 상위 디렉토리(귀하의 경우 dir)에서 달성할 수 있습니다.

find . -mindepth 1 -maxdepth 1 -type d -exec bash -c 'cd {}; printf "%s\n" * >../$(basename {}).csv' \;

이를 위해서는 절차가 필요 하며 find.bashbasename

자동으로 생성된 csv 목록과 충돌하는 이름을 가진 파일이 디렉터리에 포함되어 있지 않다는 점을 사용할 때 주의해야 합니다.

다음과 같이 작동합니다. 현재 디렉터리( )보다 한 디렉터리 수준 아래에 있는 모든 파일을 find고려합니다 . 이것이 바로 그 일입니다. 디렉터리( )인 경우 빈 중괄호 ( )와 명령 사이의 후행 문자 ( )를 다음과 같이 바꾼 후 수행합니다. 디렉토리의 이름. 이 이름을 다음과 같이 표현하면.-mindepth 1 -maxdepth 1-type d-exec-exec\;{}<SUBDIR>

bash -c 'cd <SUBDIR>; printf "%s\n" * >../$(basename <SUBDIR>).csv'

이는 하위 프로세스에서 시작되어 옵션 인수를 쉘 스크립트로 실행하게 bash합니다 .-c

cd <SUBDIR>;
printf "%s\n" * >../$(basename <SUBDIR>).csv

이는 위와 거의 동일합니다. 여기서 표현은

$(basename <SUBDIR>)

으로 확장되는 기본 이름입니다 <SUBDIR>. <SUBDIR>귀하의 경우 ./subdir1, ./subdir2 등이 반복되기 때문에 이는 필요합니다 . 해당 기본 이름은 subdir1, subdir2 등입니다.

답변2

당신은 그것을 사용하여 그것을 달성해야합니다~을 위한반지 모양.

내 이해가 맞다면 하위 디렉토리의 파일 목록을 얻고 싶습니다. 따라서 다음과 같이 하십시오:

$ cd dir
$ for files in subdir/*;do echo $files|cut -d '/' -f 2 >>filelist.csv;done

이제 dir 디렉터리에 "filelist.csv"라는 파일이 생성된 것을 확인할 수 있습니다.

관련 정보