UNIX에서 파일 반복 [닫기]

UNIX에서 파일 반복 [닫기]

나는 다음 명령을 내렸습니다.

ls -lrt

나열된 파일과 디렉터리는 다음과 같습니다.

drwxr-xr-x   4 root root    4096 Feb  2  2014 abc
drwxr-xr-x   4 root root    4096 Feb  2  2014 cde
drwxr-xr-x   4 root root    4096 Feb  2  2014 efg
-rwxr-xr-x   4 root root    4096 Feb  2  2014 aaa.txt

이제 for 루프나 while 루프를 사용하여 나열된 출력 파일이 디렉터리인지 확인하고 싶습니다.

답변1

의 경우 ls다음 명령을 사용하여 디렉터리만 나열합니다.

ls -d -- */

ls 자체를 사용하여 일반 파일을 나열하려면(그리고 파일 이름에 개행 문자가 포함되어 있지 않다고 가정) 다음 명령을 사용할 수 있습니다.

ls -p | grep -v /

GNU 및 기타 find 구현을 사용하여 일반 파일만 나열하려면 다음을 사용할 수 있습니다.

find . -maxdepth 1 -type f

(참고로 전작과 다르게 숨겨진 파일도 포함되어 있고 목록이 정렬되어 있지 않습니다.)

표준에 해당하는 것은 다음과 같습니다.

find . ! -name . -prune -type f

답변2

디렉토리 내용을 반복하고 파일 유형에 따라 작업을 수행하는 방법에 대한 "셸 스크립트 템플릿"과 같은 것을 원하는 경우 다음이 힌트를 줄 수 있습니다.

for f in *
do
   if [[ -d "$f" ]]
   then
      ... your processing of directories here, reference them as "$f" ...
   fi
done

그러면 현재 디렉터리의 모든 항목을 살펴보고 디렉터리인지 확인한 다음 원하는 처리를 수행합니다. 디렉터리 테스트 구문은 일반적인 경우 BASH에만 적용됩니다 if [ -d "$f" ].

목록을 디렉토리 항목으로만 제한하는 또 다른 방법은 다음과 같습니다.

for d in */
do
    ... whatever you need to do on directory "$d" ...
done

답변3

모든 디렉토리를 찾기 위해 반복할 필요는 없습니다 find. 다음을 사용할 수 있습니다.

find . -maxdepth 1 -type d

그러면 현재 디렉터리의 모든 디렉터리가 나열됩니다. 출력을 원하면 ls -l다음을 수행할 수 있습니다.

find . -maxdepth 1 -type d | xargs ls -ld

루프를 실제로 사용하려면 다음 구성을 사용할 수 있습니다.

for file in $(ls)
do
  if [[ -d $file ]]
  then
    ls -ld $file
  fi
done

루프 for는 반환된 모든 항목을 반복 ls한 다음 if항목이 디렉터리인지 여부를 테스트합니다.

답변4

디렉터리 이름 나열

compgen -d

지점부터 시작하지 않고

compgen -d -X '.*' | xargs ls -dlrt

관련 정보