하위 디렉터리와 상위 디렉터리의 모든 c 파일 나열

하위 디렉터리와 상위 디렉터리의 모든 c 파일 나열

다음과 같은 디렉토리 트리가 있다고 가정해 보겠습니다.

/home/xen/p.c
/home/dan/t.c
/home/jhon/l.c
...
etc (many more users) 

다음과 같이 쉼표로 구분된 (사용자 이름, c 파일의 전체 경로) 목록을 가져와야 합니다.

xen,/home/xen/p.c
dan,/home/dan/t.c
...
etc

명령줄에서 이 작업을 어떻게 수행합니까?

답변1

GNUfind를 사용하여 출력 형식을 지정할 수 있습니다. 파일이 사용자 자신에 의해 생성되었다고 가정하면 명령은 다음과 같습니다.

find /home/ -maxdepth 2 -type f -name '*.c' -printf '%u,%p\n'

man find자세히 알아보기printf

다음을 사용할 수도 있습니다.

find /home/ -maxdepth 2 -type f -name '*.c' -exec bash -c 'n="${1%/*}"; n="${n##*/}"; echo "$n",$1' _ {} \;

답변2

for i in /home/*/*.c
do
echo $i|awk 'BEGIN{FS="/"}{print $3, ",", $0;}'
done

이것이 도움이 될 수 있습니다.

또는 더 짧은 형식으로

 echo /home/*/*.c | awk 'BEGIN{FS="/";RS=" "}{printf "%s,%s\n",$3,$0;}'

어디

  • echo /home/*/*.c모든 .c 파일을 확장합니다(권한이 있는 경우).
    • BEGIN{FS="/"}/를 필드 구분자로 사용합니다.
    • {printf "%s,%s\n",$0,$3;}전체 줄($0)과 파일($3)을 인쇄합니다.

관련 정보