
나는 다음과 같은 명령을 내렸습니다.
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 . -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