1桁の数字で終わり、TXT拡張子を持つすべてのファイルを返すコマンドは何ですか?
答え1
ファイル(または他の種類のノード)を見つける最も基本的なツールの1つがこのfind
ユーティリティです。
find ./ -type f -name '*[!0-9][0-9].txt'
次を検索します。
- ...
./
現在のディレクトリ()で再帰的に実行されます。これを別のパスに変更したり、ほとんどのバージョンでデフォルトのままにすることもできますfind
。 - ...ディレクトリ、デバイスノード、シンボリックリンクなど以外のファイルエントリの場合(
-type f
)。他のタイプも見つけるには、このオプションを無視できます。 - ...与えられた名前パターンに一致する項目。 findがコマンドを受け取る前にbashやシェルがそれをglobパターンとして解釈しないように、パターンの周りに一重引用符を使用しています。アスタリスクは任意の数の文字と一致し、ファイルは数字、数字、拡張子で終わらないでください。 (
-name '*[0-9].txt'
)
ファイル名の後に単に数字が続くファイルがある場合、.txt
上記のコマンドは数字の前に数字以外の数字が必要なため、そのファイルを見逃してしまいます。次の対応するコマンドには、ブール演算子を使用して数値のみを含むファイル名(-o
is "or"および!
is "not")が含まれています。
find ./ -type f \( -name '*[!0-9][0-9].txt' -o -name '[0-9].txt' \)
find ./ -type f -name '*[0-9].txt' ! -name '*[0-9][0-9].txt'
大文字と小文字を区別することに注意してください。機密性の低い一致が必要な場合は、代わりにを使用して-iname
同様-name
の項目を一致させることもできますfile4.TXT
。また、ファイルがその拡張子を持つテキストファイルであると主張しても、それが本当であることを意味するわけではありません。 Linuxでは、名前に関係なくすべてのファイルの種類が可能です。他の拡張子があるか、まったく拡張子のないテキストファイルがある可能性があります。
答え2
一般的な古いPOSIXグローブを使用してください。
ls -d -- [0-9].txt *[!0-9][0-9].txt
答え3
zsh では、setopt extended_glob
以下を使用します~/.zshrc
。
print -lr -- *[0-9].txt~*[0-9][0-9].txt
ファイル名が次から始まらず、次を-
含む場合は\
入力を減らすことができます。
print -l *[0-9].txt~*[0-9][0-9].txt
改行ではなく名前の間にスペースを使用して名前を表示するには、次のようprint -l
に置き換えます。フォーマットされたファイル名(エイリアスによる色など)を表示するには、次のように変更するか、echo
一致するものがディレクトリではない場合は次のようにします。print -l
ls -d
ls
ls
ls *[0-9].txt~*[0-9][0-9].txt
サブディレクトリのファイルも表示するには、**/
パターンの前に次を追加します。
ls **/*[0-9].txt~*[0-9][0-9].txt
答え4
1桁の数字で終わり、拡張子が.txtのファイルを返すUnixコマンド
ls -l *[0-9].txt