我想通过终端中的脚本来计算由于它们的扩展引起的文件数量;
像:
SM1 @水木清华:〜$ ./scriptname.pl路径延伸
/家庭/ DIR /包含5个文件的* .extention
脚本输入参数,计数文件的扩展名dir
回答
这里是用Perl的等效:
#!/usr/bin/perl
# countFiles.pl
use strict;
use warnings;
use File::Glob qw(:glob);
my $directory = $ARGV[0];
my $extension = $ARGV[1];
my @fileList = <$directory/*.$extension>;
my $fileListCount = scalar @fileList;
print STDOUT "$directory contains $fileListCount files of *.$extension\n";
实例:
$ countFiles.pl /Users/alexreynolds/Desktop png
/Users/alexreynolds/Desktop contains 21 files of *.png
在控制台下面的命令会给你的文件数在DIR目录中用EXT扩展名。
ls DIR | grep .*\.EXT$ | wc | awk '{print $1}'
您可以适当地格式化消息以符合您的要求。
find -name "*.pdf" -exec echo -n "1" ";" | wc -c
将不会失败,如果文件名包含'\ n'这不是非法的。查找访问子目录。
为什么要使用perl?
谢谢。说实话应该用C或C++来完成。我更喜欢Perl,所以我感兴趣的可以在Perl中完成。 对不起,我的英文 – ted 2011-03-15 08:33:20
“失败不失败” - 哪?在我看来,它不会失败。顺便说一句,你应该使用'printf'而不是'echo',因为'echo'的某些版本不支持'-n'。尽管如此+1。 – 2011-03-15 09:14:40
你是对的 - 这是一个错字。我的第一个版本因包含换行符的文件而失败,并且我在更新评论时犯了一个错误。现在纠正了。 – 2011-03-15 16:00:14
ls ${DIR}/*.${EXT} \
| wc -l \
| sed -e 's/^[ \t]*//' \
| awk -v dir=$DIR -v ext=$EXT '{print dir" contains "$0" files of *."ext}'
用法示例:
$ DIR=/Users/alexreynolds/Desktop
$ EXT=png
$ ls ${DIR}/*.${EXT} | wc -l | sed -e 's/^[ \t]*//' | awk -v dir=$DIR -v ext=$EXT '{print dir" contains "$0" files of *."ext}'
/Users/alexreynolds/Desktop contains 21 files of *.png
谢谢,这很酷^ _^ – ted 2011-03-15 08:36:10
我不认为'wc'输出任何空格,所以'sed'是不必要的。在任何情况下,AWK命令都会使用'$ 1'而不是'$ 0'来处理它。如果内容包含空格,则应引用您的变量。 'ls“$ DIR /"*".exT”'和'awk -v“dir = $ DIR”...' – 2011-03-15 09:23:00
'wc -l'返回空白,需要用'sed'过滤。至少在我使用的'bash'版本中,引用变量会打破'ls'调用。 – 2011-03-15 13:06:53
下面是计算文件的功能,可选的扩展:
countfiles() {
command find "${1:-.}" -type f -name "${2:-*}" -print0 | command tr -dc '\0' | command wc -c
return 0
}
countfiles . "*.txt"
使用-print0确保您的文件数的情况下,保持正常有文件带有嵌入换行符的名称“\ n”。
+1非常聪明! – 2011-03-15 09:10:43
我从来没有见过关键字'命令'。为什么使用?你能详细说明吗? – 2011-03-16 07:01:24
在壳,使用通配和wc
命令。
ls -d /some/path/*.ext | wc -l
或者你可以用3210
#!/usr/bin/env perl
use strict;
use warnings;
my($path, $ext) = @ARGV;
my @files = glob "$path/*$ext";
printf "Found %d files in %s with extension %s\n", scalar @files, $path, $ext;
谢谢。这样可行。只是不能投票 – ted 2011-03-15 11:47:17
很简单做到在Perl:描述
echo ${DIR}/*.${EXT} | wc -w
失败与空白文件名 – 2011-03-15 16:01:43
感谢您的意见:) – Dagang 2011-03-16 01:50:39
跳频晚:)
#!/usr/bin/perl
use warnings;
use strict;
scalar @ARGV == 2 or die "Need two args";
opendir(my $dh, $ARGV[0]);
my @files = grep { /\.$ARGV[1]/ } readdir($dh);
closedir($dh);
printf "Directory '%s' contains %d files with extension '.%s'\n", $ARGV[0], scalar @files, $ARGV[1];
用法:
$ ./countfiles.pl <dirname> <extensionminusthedot>
感谢U.作品。不能投票。 – ted 2011-03-15 11:53:09
- 1. 通过文件扩展名验证脚本的参数?
- 2. bash脚本参数扩展
- 3. 击参数扩展和文件名
- 4. 计数文件扩展名C#
- 5. Python计数文件扩展名
- 6. 访问扩展选择参数脚本插件参数
- 7. 在Bash脚本中双参数扩展
- 8. IDEA python文件列表脚本参数未扩展
- 9. 文本文件扩展名
- 10. groovy脚本迭代通过一个文件夹,并写入所有扩展名为扩展名的文件名,但扩展名为.txt的文件
- 11. 重命名文件而不输入文件扩展名
- 12. 更改dir中每个文件的扩展名,* .txt除外
- 13. HTML5文件输入不一致的文件扩展名行为
- 14. 如何在shell脚本中删除文件名的扩展名?
- 15. 在批处理脚本中没有扩展名的文件名
- 16. bash脚本重命名文件的扩展名
- 17. 如何使用xml文件作为脚本的参数输入
- 18. 简单的awk脚本,不需要参数或输入文件
- 19. SQLITE3数据库文件的扩展名
- 20. Windows脚本宿主 - 没有文件扩展名(文件路径)
- 21. 如何使用MATLAB dir函数指定文件扩展名掩码
- 22. 加入双文件(名称相同,但不同的扩展名)在bash脚本
- 23. 参数扩展(`!$`)
- 24. 从目录中删除文件扩展名dir
- 25. BASH获取没有GET参数的文件扩展名?
- 26. GET参数正在获取不需要的文件扩展名
- 27. 文件扩展名的节点参数RegExp
- 28. 使用bash脚本重命名xml文件扩展名
- 29. 在可变文件名中嵌入数字和扩展名
- 30. MySQL的脚本,输入用户名和密码作为参数
这正是我需要的。但随着剧本有问题: '特德@ NNM:在/ var/WWW/cgi-bin目录$ ./countFiles.pl /家庭/泰德jpg' '/家庭/泰德包含的* .jpg' 0文件仍然有1个JPG文件。 用png试过了另一个文件夹。仍然是相同的结果 - 0; – ted 2011-03-15 08:50:16
@ted:引用需要在这一行中删除:'my @fileList = <$ directory /*.$ extension>;'(否则为+1)另外,我认为'File :: Glob'不是必需的, STDOUT是默认值。 – 2011-03-15 09:53:58
@丹尼斯威廉姆森:谢谢。作品。 – ted 2011-03-15 11:43:03