脚本的输入参数,扩展名为dir的计数文件

时间:2011-03-15 07:53:50

标签: regex perl bash terminal

我想通过终端脚本来计算文件的数量;
喜欢:
sm1 @smth:〜$ ./scriptname.pl路径名扩展名
/ home / dir /包含5个* .extention的文件

8 个答案:

答案 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()

在Perl中执行此操作
#!/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