for f in ~/common/.*; do
echo $f
done
나열된 항목은,
/home/sk/common/. #undesired
/home/sk/common/.. #undesired
/home/sk/common/.aliasrc
처리를 건너뛰고 이를 방지하기 위해 추악한 해킹을 사용하고 .
있습니다 ..
.
if [[ $f == '/home/sk/common/.' || $f == '/home/sk/common/..' ]]; then
true
else
--do the ops
fi
숨길 수 있는 쉘 옵션이 있습니까 dotted folders
? 저도 ls -a
이 문제에 직면하고 있습니다.
답변1
bash를 사용하여 수행하는 방법은 다음과 같습니다 extglob
.
shopt -s extglob
for f in .!(|.); do
echo "$f"
done
패턴 extglob
은 !(pattern-list)
주어진 패턴을 제외한 모든 항목과 일치합니다. 예제의 패턴은 .
로 시작하고 뒤에 아무것도 또는 다른 단일이 나오지 않는 모든 항목 과 일치함을 의미합니다 .
.
답변2
그런 뜻 이었습니까:
ls -A
당신은 또한 사용할 수 있습니다
ls -Al
. 및 .. 은 나열되지 않습니다(대문자 A가 이를 수행함). a는 모든 이유를 나열하고, A는 거의 모든 이유를 나열합니다. 그리고..목록에 없습니다.
편집: 위의 내용은 그의 두 번째 질문에 대한 것입니다. 그는 ls -a와 동일한 문제가 있다고 말했습니다.
답변3
사용find
find ~/common -type f -name ".*" -print0 | \
while read -d $'\0' file; do \
echo $file; \
done
또는 find
와IFS
find ~/common -type f -name ".*" -print0 | \
while IFS= read -rd '' file; \
do echo $file; \
done
답변4
이를 수행하는 이식 가능한 방법은 case
선언을 사용하는 것입니다. 전역을 약간 잘라내는 것도 문제가 되지 않습니다.
for f in ~/common/.?*; do
case $f in (*/..) ;; (*)
: do something w/ "$f"
esac
done