다음과 같은 디렉토리 트리가 있다고 가정해 보겠습니다.
/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)을 인쇄합니다.