スクリプトはkshです。現在のディレクトリの直下にある、サブディレクトリではなくファイルのみを含むすべてのディレクトリ名を検索する必要があります。
ls -alR
そして、最初のフィールドの最初の文字の出力を再帰的に解析します(ディレクトリの場合はd
)。 awk
が解析と検索に最適な方法だと思います。
たとえば、単純なls -al
現在のディレクトリに出力:
drwxr-xr-x 22 af staff 748 18 Mar 22:21 .
drwxr-xr-x 5 root admin 170 17 Mar 18:03 ..
-rw------- 1 af staff 3 17 Mar 16:37 .CFUserTextEncoding
drwxr-xr-x 5 af staff 170 17 Mar 17:12 Public
drwxr-xr-x 9 af staff 306 18 Mar 17:40 Sites
-rw------- 1 af staff 3 17 Mar 16:37 textd
…
この出力には、Public
とSites
の2つのディレクトリがあります。ディレクトリPublic
にはサブディレクトリが含まれていませんが、Sites
には含まれています。 Sites
には3つのサブディレクトリがあります。したがって、ディレクトリを含まないディレクトリのみをエコーする必要があります。私の場合、これはSites
だけです。
awk
を使用する必要はまったくありません。 ksh
が提供する組み込みテストを使用します。たとえば、次のようにします。
#!/bin/ksh
for NAME in *
do
FOUND=no
if [[ -d $NAME && $NAME != '.' && $NAME != '..' ]]
then
for SUBNAME in $NAME/*
do
if [[ -d $SUBNAME ]]
then
FOUND=yes
break
fi
done
if [[ $FOUND == no ]]
then
echo Found only files in $NAME
fi
fi
done
この小さなスクリプトは、現在のディレクトリ内のすべてのディレクトリを調べ、サブディレクトリではなくファイルのみが含まれているかどうかを通知します。
find
を使用でき、「通常のUnixファイルシステム」で作業している場合(つまり、 find(1) で定義されている- -noleafオプションの説明)の場合、次のコマンドを使用できます。
_find . -type d -links 2
_
各ディレクトリには少なくとも2つの名前(ハードリンク)があります:_.
_とその名前。そのサブディレクトリは、存在する場合、親ディレクトリを指す_..
_を持つため、Nサブディレクトリを持つディレクトリには、N + 2に等しいハードリンクカウントがあります。したがって、ハードリンクカウントが2のディレクトリを検索すると、サブディレクトリがN = 0のディレクトリが検索されます。
したがって、find
を使用できる場合、これはおそらく最速の方法であり、各メンバーのディレクトリの内容をstat()
でシェル内ループよりも明らかに優れています。
_*/
_は、現在のディレクトリのサブディレクトリに一致します。これには、ディレクトリへのシンボリックリンクも含まれます。
Ksh93では、パターンの先頭に~(N)
を追加すると、一致がない場合は空のリストに展開されます。これがないと、一致がない場合、パターンは変更されません。
次のksh93関数は、サブディレクトリやディレクトリへのリンクを含まない現在のディレクトリのサブディレクトリをリストします。
_list_leaf_directories () {
local FIGNORE='.?(.)' # don't ignore dot files
local d
for d in */; do
[[ -L $d ]] || continue; # skip symbolic links
set -- ~(N)"$d"/*/
if ((!$#)); then echo "$d"; fi
done
done
_
私があなたを誤解していないのであれば、サブディレクトリではなくディレクトリでファイルを見つけたいだけです。これがあなたの意図である場合、ここに解決策があります
find . -type f
通常のファイル(ブロックデバイスファイル、キャラクターデバイスファイルなど)以外を検索する場合は、find
コマンドのマニュアルページを参照し、そのページでtypeキーワードを探します。通常のファイルやディレクトリなど、さまざまなファイルタイプが表示されます。
これがあなたが探しているものであることを願っています