ディレクトリ内のすべてのファイルを処理するbashスクリプトを作成しようとしています。これらのファイル名はすべてドットで始まるため、非表示になります。ワイルドカードを使用してディレクトリ内のすべてのアイテムをインポートしようとすると、ワイルドカードは拡張されません。
私のループコードは次のようになります。
#!/bin/bash
shopt -s extglob
for i in "$(pwd)"/*; do
echo "$i"
done
出力は単なるです/Users/.../*
。
これは、隠しファイルを具体的に扱う点で他のスレッドとは異なります。同様のファイルをtest
ディレクトリに追加すると機能します。わかりました/Users/.../test
。
また、端末で別々に実行してみましたが、同じ結果を得ました。ワイルドカード拡張を隠すファイルを作成するには?
答え1
私はそれを考えた!もっと詳しく見てくださいshoptのドキュメントdotglob
、という点で始まるファイル名を含むオプションがあります。
shopt -s dotglob
スクリプトの先頭に追加しましたが、これで動作します。これで、出力にすべての隠しファイルとディレクトリが一覧表示されます(./
および除外../
)。
私のスクリプトは次のようになります。
#!/bin/bash
shopt -s extglob
shopt -s dotglob
for i in "$(pwd)"/*; do
echo "$i"
done
答え2
dotglobなしのposixソリューション
#!/bin/sh
for i in "$PWD"/* "$PWD"/.*
do
[ "${i##*/}" = . ] || \
[ "${i##*/}" = .. ] || \
[ "${i##*/}" = \* ] || \
[ "${i##*/}" = .\* ] && continue
echo "$i"
done