我想通过终端脚本来计算文件的数量;
喜欢:
sm1 @smth:〜$ ./scriptname.pl路径名扩展名
/ home / dir /包含5个* .extention的文件
答案 0 :(得分:2)
find -name "*.pdf" -exec echo -n "1" ";" | wc -c
如果文件名包含'\ n',则不会失败,这不是非法的。查找访问子目录。
为什么要使用perl?
答案 1 :(得分:2)
以下是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
答案 2 :(得分:1)
这是一个计算文件的函数,可选择通过扩展名:
countfiles() {
command find "${1:-.}" -type f -name "${2:-*}" -print0 | command tr -dc '\0' | command wc -c
return 0
}
countfiles . "*.txt"
使用-print0可确保您的文件计数保持正确,以防文件名中包含嵌入的换行符“\ n”。
答案 3 :(得分:1)
在shell中,使用globbing和wc
命令。
ls -d /some/path/*.ext | wc -l
或者您可以使用glob()
#!/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;
答案 4 :(得分:1)
迟到了:)
#!/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>
答案 5 :(得分:0)
控制台上的以下命令将为您提供具有EXT扩展名的DIR目录中的文件数。
ls DIR | grep .*\.EXT$ | wc | awk '{print $1}'
您可以根据自己的要求对消息进行格式化。
答案 6 :(得分:0)
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
答案 7 :(得分:0)
很简单:
echo ${DIR}/*.${EXT} | wc -w