아래에 언급된 형식으로 지정된 디렉터리의 파일을 인쇄하려면 특별한 요구 사항이 있습니다.
filename1 <type of file> owner group
filename2 <type of file> owner group
$
열 사이의 구분 기호는 탭 문자입니다.
다음 명령을 작성할 수 있었지만 system
명령의 출력에는 피하고 싶은 새로운 줄이 소개됩니다.
find . -type f | xargs -I{} ls -let {} | awk -F" " 'BEGIN{OFS="\t" ORS=":"} {cmd=sprintf("file \"%s\"", $10);system(cmd);print $3,$4}'| tr -s ':\t ' '\t'
생성된 출력은 다음과 같습니다.
filename1 <type of file>
owner group filename2 <type of file>
owner group $
나는 그 system
명령이 내가 피하고 싶은 새로운 줄을 담당한다는 것을 알고 있습니다. 같은 이유로 ORS를 사용하고 있지만 운이 없습니다.
어떤 도움이라도 대단히 감사하겠습니다.
답변1
명령에서 파이프 I/O를 사용할 수 있습니다 awk
(적어도 gawk
Solaris에서는 테스트하지 않았습니다).
find . -type f | xargs ls -l | awk 'BEGIN { OFS="\t" } { command=sprintf("file \"%s\"", $9); command | getline type; close(command); print type, $3, $4 }' | tr ":" "\t"
지원 하면 find
단순화할 수 있습니다.
find . -type f -ls | awk ...
편리한 점이 있습니다리소스 사용getline
여기에는 해야 할 일과 하지 말아야 할 일이 많이 포함되어 있습니다( close()
원래 했던 것처럼 사용하지 않는 것을 포함하여).