Linuxシステムでは、名前が2〜3文字の隠しファイルを見つけたいと思います。
私は試した:
ls .?[a-zA-Z][a-zA-Z]
ls .??[a-zA-Z]
私もそれを試しましたが、find . -name "???"
それぞれfind . -name "??"
3文字と2文字を含むファイル名のみが表示されます。
答え1
隠しファイル名は常にドットで始まります。 2文字の長さ(最初の点を含む)の隠しファイル名はと一致し.?
、.??
3文字の長さの隠しファイル名は一致します。
次のような名前が欲しいとしましょう。一般ファイル、ディレクトリなどのファイル形式の代わりに、次のものを使用できます。
find . -type f \( -name '.?' -o -name '.??' \)
現在のディレクトリの中または下に名前が隠されていて、2〜3文字の長さの一般的なファイルを探します。
シェルを使用bash
し、現在のディレクトリの名前にのみ興味がある場合:
shopt -s nullglob
for name in .? .??; do [[ -f $name ]] && printf '%s\n' "$name"; done
これは、2つのパターン(存在する場合)のいずれかに一致するすべての名前を繰り返し、一般ファイルまたは一般ファイルへのシンボリックリンクに対応する名前を印刷します。
nullglob
シェルオプションを設定すると、bash
パターンが名前と一致しない場合は、拡張されずに残っているのではなく完全に削除されます。
これらの2つのモードはでextglob
シェルオプションを設定することで結合することができます(またはになるかもしれませんが、少し混乱します)。bash
.?
.??
.@(?|??)
.??(?)
zsh
シェルでは、glob修飾子を使用してパターンを通常のファイルにのみ一致させることができるため、ループは必要ありません。
printf '%s\n' .(?|??)(.)
これには、(.)
名前の一致を通常のファイルに限定するglobbing修飾子があります。
答え2
find
Bash CentOS 8のGNUバージョン4.6.0:
find . -type f -name '.??' -o -name '.???'
これにより、2〜3文字を含む隠しファイルを見つけることができます。
.
キャラクターの1つと見なされる場合:
find . -type f -name '.?' -o -name '.??'