ls -l의 파일 및 디렉터리 목록을 가로로 인쇄하는 대신 한 열에 어떻게 정렬할 수 있나요?

ls -l의 파일 및 디렉터리 목록을 가로로 인쇄하는 대신 한 열에 어떻게 정렬할 수 있나요?

현재 사용자의 모든 파일과 디렉터리 이름을 인쇄하려고 하는데, 계속 한 줄이 인쇄됩니다. ls -l을 인쇄할 때처럼 각 파일이 열로 나타나기를 원합니다.

이에 대해 도움을 줄 필요는 없지만 더 나은 맥락을 위해 각 파일 이름 뒤에 콜론 ":"이 나타나는지 확인하고 첫 번째 필드에 그룹 권한이 있는지 확인하려고 했습니다. 예를 들어 "file/dir:---" 또는 "file/dir:r--"처럼 보일 수 있습니다.

echo $(ls -l /home/$(whoami) | awk '{if (NR>1) print $9}'): $(ls -l /home/$(whoami) | awk '{if (NR>1) print $1}')

답변1

ls -1

한 줄에 하나의 파일을 나열합니다. ls이는 출력이 터미널이 아닌 다른 곳으로 리디렉션되는 경우 기본값입니다.

원하는 결과를 얻으려면 다음과 같은 작업을 수행하는 것이 좋습니다.

ls -l | awk 'NR > 1 { print $9 ":" $1 }'

아니면 더 나은 방법은

stat -c "%n:%A" *

두 가지 모두 그룹 권한뿐만 아니라 모든 권한을 나열합니다. 그룹 권한만 보려면 다음을 사용하세요.

ls -l | awk 'NR > 1 { print $9 ":" substr($1,5,3) }'

또는

stat -c "%n:%A" * | sed 's/....\(...\)...$/\1/'

(쪽으로사용자 1404316~을 위한표현 sed방식).

-parsing ls변형은 파일 이름의 공백 및 기타 공백 문자를 처리하지 않으므로일반적으로 사용해서는 안 됩니다..

답변2

findGNU 확장이 포함된 버전에 액세스할 수 있는 경우 더 간단한 솔루션이 있습니다. 답을 찾으려면 실행 man find하고 검색 하세요 -printf(이렇게 하려면 먼저 를 누르세요 /^ *-printf). 그렇다면 운이 좋을 것입니다. 솔루션이 다음과 같을 수 있기 때문입니다.

find . -maxdepth 1 -type f -printf "%f: %M\n" | sed 's/....\(...\)...$/\1/'

보너스로 이 답변은 파일 이름에 콜론 문자가 포함된 특수한 경우에 작동합니다.

답변3

현재 사용자에게만 파일이 필요한 경우.

ls -l | awk -v var="$(whoami)" '$4 == var {print $9}'

그러면 현재 사용자에게 속한 파일만 필요한 형식으로 인쇄됩니다.

관련 정보