AIXでは、シェル・スクリプトを使用して3つの文字サブディレクトリーをすべて印刷します。

AIXでは、シェル・スクリプトを使用して3つの文字サブディレクトリーをすべて印刷します。

/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照会を特定の深さに制限しますか?findGNU述部と同等の標準です-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

関連情報