Linuxでは、ディレクトリに2桁の数字で終わるファイル名がいくつあるかを示すコマンドは何ですか?ls
次のコマンドを使用してください。
ls -l | wc –l *[0-9][0-9]
答え1
Bashでは、次の操作は非再帰的です。もちろん、関数に入れることもできます。
shopt -q nullglob || restore=1 && shopt -s nullglob
var=(*[0-9][0-9])
echo ${#var[@]}
[ 1 -eq "$restore" ] && shopt -u nullglob
これは、奇妙なファイル名がある場合でも機能します。ファイル名がおかしくない場合は、次のls
方法を使用できます。
ls -d1b *[0-9][0-9] | wc -l
以前使用したフラグはls
異なりました。-d
コンテンツではないディレクトリを一覧表示します(something00
たとえば、名前付きディレクトリがある場合)。つまり、ファイル名を-1
エスケープするために単一の列を使用することを意味します。-b
ファイル名は機能します。 。
something00
これらの両方に、数に指定されたディレクトリが含まれています。ファイルまたは再帰だけが必要な場合、find
これはあなたが探しているものです。これは現在のディレクトリ(.
)を再帰的に検索し、ファイル()のみを検索します-type f
。
find . -type f -name '*[0-9][0-9]' -printf 'f\n' | wc -l
を使用すると-printf
文字のみが印刷さf
れ、ファイル名は印刷されません。クレイジーファイル名から保護できるようにファイル数を数えたいだけです。
答え2
必要でない場合は、次のコマンドをwc -l
使用できます。tree
tree -P "*[0-9][0-9]" foldername/
テスト
私のフォルダの1つに2桁の数字で終わる3つのファイルを作成しました。
まず、lsを実行してすべてのファイルを表示します。
bash-3.2$ ls
1aga21 abcd kshexp.ksh new.txt temp temp1 temp12 temp2 temp3 temp34
次に、treeコマンドを使用してフォルダの1レベル上に移動します。
その後、tree
次のコマンドを発行します。
bash-3.2$ tree -P "*[0-9][0-9]" jun4th/
jun4th/
|-- 1aga21
|-- temp12
`-- temp34
0 directories, 3 files
ご覧のとおり、最後の行には基準に一致するファイルの総数がリストされています。これ-血コマンドフラグはtree
モードを指定します。
編集する
derobertが指摘したように、2つの数字で終わるディレクトリがあり、そのディレクトリに2つの数字で終わる複数のファイルが含まれている場合、treeコマンドはすべてのファイルを生成してよりノイズの多い出力を生成します。元のコマンドを以下のように調整すると、これを防ぐことができます。
tree -P "*[0-9][0-9]" -L 1 jun4th/
このフラグを参照してください-L 1
。これは、ファイルが現在のディレクトリの1つの下位レベルでのみ検出されることを意味します。
答え3
Perlが気に入らない場合:
perl -E '@a=<*[0-9][0-9]>;say scalar @a'
これは、(これまで提案されている他のすべての解決策と同様に)名前が2で終わるファイルの数を数えると仮定します。以上数字。ファイルfoo123
も計算されます。
これが望ましくない場合は、次のPerlはすべての数を印刷します。文書(ファイルとディレクトリとは対照的に)名前は2桁の数字で終わります。
perl -E 'say scalar grep { -f && /[^0-9][0-9]{2}\z/ } <*>'
答え4
移植可能なアプローチは次のとおりですfind
。
find ././ ! -type d -name '*[0-9][0-9]' | grep -c '^\./\./'
そしてシェル機能は次のとおりです。
set -- ./*[0-9][0-9]
for f do
[ -e "$f" ] && echo
done | wc -l
ls
ファイル名の末尾に2桁の数字しかないファイルを再帰的で移植可能に計算して一致させるには、次のようにします。
ls ./ -aR1iqp |
grep -c '^ *[0-9].*[^0-9][0-9][0-9]$'
現在のディレクトリのみを検索するには:
ls ./.* ./* -ad1iqp |
grep -c '^ *[0-9].*[^0-9][0-9][0-9]$'