Bashワイルドカードは拡張されません。

Bashワイルドカードは拡張されません。

ディレクトリ内の各ファイルのディレクトリを作成しようとしています。

mkdir *

ファイルが存在することを返します。だから私は努力します

mkdir *.d

「*.d」というディレクトリを作成します。ワイルドカード拡張を強制する方法は?

ベストアンサー1

ワイルドカードは常に次に拡張されます。既存の名前。

mkdir *拡張名がすでに存在しているため、コマンドは失敗しました*

既存の名前と一致しないため、コマンドはmkdir *.d「失敗」します。*.dしたがって、デフォルトでは、モードは1を*.d拡張しないというディレクトリを作成します。を使って削除できますrmdir '*.d'

各ディレクトリのディレクトリの作成一般ファイル新しいディレクトリがファイルと同じ名前を持つが、サフィックスが付くように現在のディレクトリに.d:

for name in ./*; do
    if [ -f "$name" ]; then
        # this is a regular file (or a symlink to one), create directory
        mkdir "$name.d"
    fi
done

または「quips」が好きな方のために

for n in ./*; do [ -f "$n" ] && mkdir "$n.d"; done

以下でもbashこれを行うことができます。

names=( ./* )
mkdir "${names[@]/%/.d}"

しかし、これはglobが拡張するコンテンツが通常のファイルであるか他のファイルであるかを確認しません。

上記のコマンドの最初の文字は、ファイル名に最初の文字ダッシュ()が含まれないように./するためのものです。-それ以外の場合は、ダッシュとその後の文字がオプションとして解釈されますmkdir


一部のシェルには、 一致しないシェルワイルドカードを空の文字列に拡張するシェルオプションがあります。nullglobここでbash使用を有効にしてくださいshopt -s nullglob

おすすめ記事