현재 사용자의 모든 파일과 디렉터리 이름을 인쇄하려고 하는데, 계속 한 줄이 인쇄됩니다. 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
find
GNU 확장이 포함된 버전에 액세스할 수 있는 경우 더 간단한 솔루션이 있습니다. 답을 찾으려면 실행 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}'
그러면 현재 사용자에게 속한 파일만 필요한 형식으로 인쇄됩니다.