저는 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 {} \;