크기, 마지막 수정 날짜, 절대 경로를 포함하여 HDD에 있는 모든 파일을 나열하고 싶습니다.
아이디어 형식:
[file size] [last modified date] [absolute path] [ filename]
나는 시도했다:
ls -lhR | awk -v PWD=$PWD '{printf("%4s %4s %2s %5s %s/%s\n", $5, $6, $7, $8, PWD, $9); }' >> /tmp/report.list
사이에 공간이 있는 일부 파일/디렉토리에 도달할 때까지 완벽하게 작동했습니다.... 그래서 다음을 시도했습니다.
find . -name "*" -exec du -sh {} \; -exec date -r {} \; -exec echo " " \; >> /tmp/report.list
그러나 출력은 2줄이 아닌 3줄로 퍼져 있는 것으로 보이며, 인쇄된 경로도 파일의 절대 경로가 아닙니다.
어떻게 해야 하나요?
답변1
find
의 -printf
작업을 사용하여 해당 속성을 직접 출력 할 수 있습니다 . 예:
find "$PWD" -printf '%s\t%Tx\t%h\t%P\n'
%s
: 파일 크기(바이트)입니다.%Tx
: 파일의 마지막 수정 시간(로케일 날짜 표현)%h
: 파일명의 선두 디렉터리%P
: 파일이 발견된 명령줄 인수의 이름과 함께 파일 이름이 제거되었습니다.
디렉터리 경로( %h
)는 명령이 호출되는 명령줄 경로 인수를 기준으로 인쇄됩니다 find
. 를 사용하여 작업 디렉터리를 지정하면 $PWD
절대 경로가 됩니다.
답변2
-printf
찾기에서 옵션을 사용할 수 있습니다 .
find / -type "f" -printf "%s\t%TY-%Tm-%Td\t%p\n" > file.txt
그러면 다음 형식의 파일이 만들어집니다.
[크기(바이트)]TAB[YYYY-mm-dd 형식의 마지막 수정 날짜]TAB[FULLPATH]
전체 파일 구조에서 실행됩니다.
\t
탭으로 구분하지 않으려면 각각을 공백으로 바꾸십시오 . 를 사용하면 의 옵션 man find
에 대한 다른 형식 옵션을 찾을 수 있습니다 .-printf
find