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はほとんどすべての理由をリストします。そして..リストにありません。
編集:上記は彼の2番目の質問についてです。彼は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