/Test
私のシステムには、その下に多くのディレクトリがあるディレクトリがあります。 AIXシステムでは、3つの文字名を持つすべてのディレクトリーを印刷したいと思います。
Gnu / Linux用のコードを入手しました。
find /test -maxdepth 1 -type d | awk -F / 'length($NF) == 3' |awk -F / '{print $3} '
これはAIXサーバーです。
例:/ testディレクトリにはサブディレクトリが含まれています。
test1
AAA
BBB
Test2
test3
希望の出力:
AAA
BBB
答え1
バラよりPOSIX照会を特定の深さに制限しますか?find
GNU述部と同等の標準です-maxdepth
。だからここにあります:
(cd /Test && find . ! -name . -prune -type d -name '???') | sed 's|\./||'
またはzsh
インストールされている場合:
zsh -c 'printf "%s\n" /Test/???(D/:t)'
答え2
単純なシェルループソリューションは次のとおりです。
for pathname in Test/???/; do
printf '%s\n' "$( basename "$pathname" )"
done
これにより、指定されたパターンに一致する各サブディレクトリ名(またはサブディレクトリのシンボリックリンク名)が印刷されます。
他に何かしたいならチェックリスト名前を指定すると、次のことができます。
for pathname in Test/???/; do
# some code using "$pathname" here
done
つまり、いいえまずリストを作成してから繰り返します。
答え3
ディレクトリとして再帰的に使用したくない場合は、単純なワイルドカードを使用してください。できる十分。基準はです???/
。これは、「正確に3文字を含むディレクトリ名と一致することを意味します。kshのデフォルトのAIXシェルでは、ピリオドと2文字で始まる「隠し」ディレクトリと一致するように追加する必要があります.??/
(ピリオドを3つとして数えると仮定します。 ).???/
)ピリオドが含まれていない場合)。
それ以外に、唯一の「トリック」は次のとおりです。
サブシェルを使用して
cd
/ testディレクトリに入ります。それ以外の場合は、先行する "/test" 文字列をさらに後処理する必要があります。末尾のスラッシュを使用してディレクトリ(ファイルのコントラスト)でワイルドカードの一致を強制するため、各行から末尾のスラッシュを削除するために
/
使用します。sed
その後、1行は次のようになります。
(cd /test; printf '%s\n' ???/ .??/) | sed 's!/$!!'
設定例は次のとおりです。
mkdir /test
mkdir /test/AAA /test/BBB /test/.AB
touch /test/aaa
サンプルの結果は次のとおりです。
AAA
BBB
.AB