디렉터리의 파일을 반복하는 방법(숨겨진 파일 제외)

디렉터리의 파일을 반복하는 방법(숨겨진 파일 제외)

사용:

for eachfile in /mnt/thara/*

또한 숨겨진 파일도 탐색합니다. 파일을 숨길 필요가 없습니다.

답변1

bash의 일반적인 동작은 for를 사용할 때 숨겨진 파일을 보지 않는 것입니다. 그러나 이 동작은 shopt 명령을 사용하여 변경할 수 있습니다.

"*"를 사용하여 숨겨진 파일 검사를 활성화하려면:

shopt -s dotglob

"*"를 사용하여 숨겨진 파일 검사 비활성화(기본 동작)

shopt -u dotglob

따라서 다음과 같은 스크립트를 시도해 보십시오.

shopt -u dotglob
for eachfile in /mnt/thara/*

이제 숨겨진 파일은 사라져야 합니다.

답변2

다른 방법은

for eachfile in /mnt/thara/[^.]*

답변3

쉘 옵션에 대한 의견에 동의합니다 dotglob. 설정하지 않으면 for 루프의 동작이 예상됩니다.

utente@computer:/tmp/test$ shopt | grep dotglob
dotglob         off

a, b, 을 c일반 파일 .hidden1.hidden2숨겨진 파일 로 둡니다 .

utente@computer:/tmp/test$ touch a b c .hidden1 .hidden2

utente@computer:/tmp/test$ ls -al
totale 8
drwxrwxr-x  2 utente utente 4096 giu 10 18:28 .
drwxrwxrwt 13 root   root   4096 giu 10 18:28 ..
-rw-rw-r--  1 utente utente    0 giu 10 18:28 a
-rw-rw-r--  1 utente utente    0 giu 10 18:28 b
-rw-rw-r--  1 utente utente    0 giu 10 18:28 c
-rw-rw-r--  1 utente utente    0 giu 10 18:28 .hidden1
-rw-rw-r--  1 utente utente    0 giu 10 18:28 .hidden2

루프의 경우:

utente@computer:/tmp/test$ for eachfile in * ; do ls $eachfile ; done

a
b
c

find쉘 옵션과 무관한 또 다른 접근 방식: 초기 문자가 점과 일치하는 모든 경로 이름을 필터링 하도록 지시하겠습니다 ..

utente@computer:/tmp/test$ find . \( ! -path '*/.*' \) -type f  -exec ls {} \;

./c
./b
./a

당신은 또한 볼 수 있습니다이 문제superuser.com에서

답변4

아니면 아주 간단하게...

ls -l | egrep -v "^\."

또는 파일 이름을 표시하는 모든 디렉터리를 반복합니다.

ls -R | egrep -v "^\."

관련 정보