사용:
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 "^\."