2番目の文字が数字である現在のディレクトリのすべてのファイルを一覧表示するにはどうすればよいですか? [コピー]

2番目の文字が数字である現在のディレクトリのすべてのファイルを一覧表示するにはどうすればよいですか? [コピー]

私はls ?[0-9]*これを試しましたが、これは現在のディレクトリのすべてのファイルと一致しますが、現在のディレクトリのすべてのディレクトリを展開し、すべてのサブディレクトリのファイルと一致します。 *が現在のディレクトリにのみ一致するようにしたいと思います。

---- Program output --------------------------------
f1
f2
g2t
g3t

d2:

d4:

--- Expected output (text)---
d2
d4
f1
f2
g2t
g3t

ここで、d2とd4はディレクトリ、残りはファイルです。 d2: と d4 ではなく、d2 と d4 としてリストしたい。

答え1

?[0-9]* ただ名前で拡張現在の2番目の文字が数字のディレクトリ。 ls、ディレクトリ名を取得すると、そのディレクトリの内容がはっきりと表示されます。つまり、lsこれを行わないように指示する必要があることを意味します。

以下を使用してこれを実行できますls -d

ls -d -- ?[0-9]*

または

ls -d ./?[0-9]*

--ファイル名がダッシュで始まる場合、ファイル名の最初の文字はオプションとして解釈されませ./ん。ls

ディレクトリ以外の項目にのみ興味があり、ディレクトリのシンボリックリンクも消去したい場合は、これを行う2つの確実な方法があります。

  1. シェルループを使用して各名前をテストしてディレクトリであることを確認し、そうでない場合は名前を表示します。

    for name in ?[0-9]*; do
        [ ! -d "$name" ] && printf '%s\n' "$name"
    done
    

    ドットで始まるファイル(隠しファイル)を含めるために、シェルにはループdotglobshopt -s dotglobbash設定できるシェルオプションがあります。

  2. find現在のディレクトリでディレクトリ以外の項目を検索するために使用されます(そしてディレクトリへのシンボリックリンクを消去します)。

    find -L . -maxdepth 1 ! -type d -name '?[0-9]*'
    

    -Lmakeオプションは、findすべての-type dシンボリックリンクのターゲットを参照します(現在のパス名がシンボリックリンクの場合)。

答え2

正規表現を使用して、次のようにlsをegrepにパイプすることができます。

ls | egrep '.\d.*'

関連情報