Bashワイルドカードは隠しファイルを拡張しません。

Bashワイルドカードは隠しファイルを拡張しません。

ディレクトリ内のすべてのファイルを処理する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

関連情報