선택한 파일의 디렉터리 정보에서 CSV 생성

선택한 파일의 디렉터리 정보에서 CSV 생성

저는 Mac을 사용하고 있는데 이 명령줄 문제로 인해 어려움을 겪고 있습니다. 적어도 가장 쉬운 방법은 CL을 이용하는 것이라고 가정합니다.

지정된 확장자 세트(예: .mov, .mkv, .flv 등 비디오 등)의 파일에 대해 디렉토리 트리를 반복적으로 검색하고 싶습니다. 그런 다음 각 줄에 파일 이름(제거 경로)과 생성 날짜가 포함된 CSV 형식을 출력하고 싶습니다.

이 작업은 명령줄이나 기껏해야 간단한 스크립트에서 수행되어야 하는 것처럼 보이지만 혼란스럽습니다.

답변1

MacOS는 파일이 생성된 시기를 추적하지만 이를 사용할 수 있는 도구가 많지 않으며 일반적으로 의미가 없습니다. 대부분의 경우 수정 시간이 잘 작동하며 더 많은 도구에서 지원됩니다.

내 모든 솔루션에서는 파일 이름에 문자 ,"개행 문자가 포함되어 있지 않다고 가정합니다. 그렇지 않으면 출력이 모호해집니다. CSV 파일에서 이러한 문자를 나타내려면 특별한 주의가 필요합니다. 파일 이름에 쉼표가 포함될 수 있는 경우 파일 이름 주위에 큰따옴표를 넣거나 ;열 구분 기호와 같은 다른 문자를 사용해야 할 수 있습니다.

zsh, 수정 시간

필요한 파일을 열거하려면 다음을 사용하십시오.글로벌 운영자 **하위 디렉터리를 탐색하고 (…|…)여러 확장자를 일치시킵니다. 사용글로벌 예선 .일치 항목을 일반 파일로 제한하고 N일치 항목이 없어도 오류를 발생시키지 않으며 선택적으로 D도트 파일을 포함합니다. 또는 다음을 사용하십시오.와일드카드 플래그 i확장자를 대소문자를 구분하지 않고 일치시킵니다.

필요한 데이터를 얻으려면 다음을 사용하십시오.zstat모듈로 제작되었습니다 zsh/stat. 디렉토리 부분 없이 파일 이름을 인쇄하려면 다음을 사용하십시오.기록 수정자 t에 고정매개변수 확장.

zmodload -F zsh/stat b:zstat
for x in **/*.(#i)(mov|mkv|flv)(.N); do
  TZ=UTC zstat -A a -F '%Y-%m-%d %H:%M:%S' +mtime -- $x;
  print -lr -- "$x:t,$a[1]";
done

zsh + /usr/bin/stat, 생성 시간

stat대신 시스템 유틸리티를 사용하면 zstat파일 생성 시간을 나열할 수 있습니다. 파일 이름에서 디렉터리 부분을 제거하는 옵션이 없으므로 stat먼저 파일이 포함된 디렉터리로 전환합니다.

for x in **/*.(#i)(mov|mkv|flv)(.N); do
  (cd $x:h && TZ=UTC stat -t '%Y-%m-%d %H:%M:%S' -f %N,%SB -- $x:t)
done

GNU 검색, 수정 시간

GNU를 사용하면 find다음을 사용할 수 있습니다.-printf기초적인원하는 형식으로 출력을 렌더링합니다. 사용%f디렉토리 부분이 없는 파일 이름의 경우%T그 다음에시간 형식수정 시간입니다. 여러 확장자를 일치시키려면-regex그리고-regextype posix-extended매우 편리합니다.

TZ=UTC gfind -type f -regextype posix-extended -regex '.*\.(mov|mkv|flv)' \
      -printf '%f,%TY-%Tm-%Td %TH:%TM:%TS\n'

/usr/bin/find+ /usr/bin/stat, 생성 시간

시스템에서 find검색 부분은 기본 옵션 -E대신 옵션을 사용한다는 점에서 GNU find와 유사 -regextype posix-extended하지만 목록을 계산하려면 쉘 코드를 사용해야 합니다. 이 작업을 통해 -execdir파일의 기본 이름을 편리하게 얻을 수 있습니다.

TZ=UTC find -E . -regex '.*\.(mov|mkv|flv)' -type f \
     -execdir sh -c 'for x do stat -t "%Y-%m-%d %H:%M:%S" -f %N,%SB -- "$x"; done' sh {} \;

관련 정보