私は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つの確実な方法があります。
シェルループを使用して各名前をテストしてディレクトリであることを確認し、そうでない場合は名前を表示します。
for name in ?[0-9]*; do [ ! -d "$name" ] && printf '%s\n' "$name" done
ドットで始まるファイル(隠しファイル)を含めるために、シェルにはループ
dotglob
前shopt -s dotglob
にbash
設定できるシェルオプションがあります。find
現在のディレクトリでディレクトリ以外の項目を検索するために使用されます(そしてディレクトリへのシンボリックリンクを消去します)。find -L . -maxdepth 1 ! -type d -name '?[0-9]*'
-L
makeオプションは、find
すべての-type d
シンボリックリンクのターゲットを参照します(現在のパス名がシンボリックリンクの場合)。
答え2
正規表現を使用して、次のようにlsをegrepにパイプすることができます。
ls | egrep '.\d.*'