否定を使用してディレクトリを除外しようとしましたが、ディレクトリはパターンマッチングにまだ表示されます。
bash-4.3$ ls
file_1.txt testdir
bash-4.3$ shopt extglob
extglob on
bash-4.3$ echo !(*/)
file_1.txt testdir
bash-4.3$
私は何が間違っていましたか?
for
注:ループまたは[
コマンドが利用可能であることを知っていますが、具体的には調べたいとfind
思います。extglob
答え1
あなたは、、.../
にいることはできません。@(...)
!(...)
*(...)
/
glob間にのみ表示またはa[x/y]b
考慮することもできます@(a\[x)/@(y\]b)
。 globは最初に分割され、/
各部分はディレクトリの内容と一致します。ただし、ksh glob拡張子がある場合、内部拡張子は分割されませんが、x(...)
各glob部分はまだファイル名と一致します。では、現在のディレクトリのすべてのファイル名と一致します。明らかに、ファイル名に含めることができないため、一致するものがないため、すべてのファイルと一致します。/
(...)
!(*/*)
*/*
/
!(*/*)
zsh
ここではglob修飾子を使用する必要があります。
echo *(^/)
ディレクトリを除くすべての種類のファイルで動作します。または 's (ディレクトリタイプのすべてのファイル)bash
の逆です。*/
シンボリックリンク解決後):
echo *(-^/)
(ディレクトリでもディレクトリシンボリックリンクでもないファイル)