且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

在linux的目录中查找与模式匹配的文件数

更新时间:2022-11-14 07:56:13

使用 find 可能会更好:

find . -name "pattern_*" -printf '.' | wc -m

在您的具体情况下:

find . -maxdepth 1 -name "20061101-20131101_kh5x7tte9n_2010_*" -printf '.' | wc -m

find 将返回符合条件的文件列表.-maxdepth 1 将使搜索仅在路径中完成,没有子目录(感谢Petesh!).-printf '.' 将为每个匹配项打印一个点,因此带有新行的名称不会使 wc -m 中断.

find will return a list of files matching the criteria. -maxdepth 1 will make the search to be done just in the path, no subdirectories (thanks Petesh!). -printf '.' will print a dot for every match, so that names with new lines won't make wc -m break.

然后wc -m 会指明与文件数匹配的字符数.

Then wc -m will indicate the number of characters which will match the number of files.

两种可能方案的性能比较:

Performance comparation of two possible options:

让我们用这个模式创建 10 000 个文件:

Let's create 10 000 files with this pattern:

$ for i in {1..10000}; do touch 20061101-20131101_kh5x7tte9n_201_$i; done

然后用ls -1 ...find ...比较得到结果所需要的时间:

And then compare the time it takes to get the result with ls -1 ... or find ...:

$ time find . -maxdepth 1 -name "20061101-20131101_kh5x7tte9n_201_*" | wc -m
10000

real    0m0.034s
user    0m0.017s
sys     0m0.021s

$ time ls -1 | grep 20061101-20131101_kh5x7tte9n_201 | wc -m
10000

real    0m0.254s
user    0m0.245s
sys     0m0.020s

find 快了 5 倍!但是如果我们使用 ls -1f (再次感谢Petesh!),那么ls甚至比find还要快:

find is x5 times faster! But if we use ls -1f (thanks Petesh again!), then ls is even faster than find:

$ time ls -1f | grep 20061101-20131101_kh5x7tte9n_201 | wc -m
10000

real    0m0.023s
user    0m0.020s
sys     0m0.012s