входные параметры для скрипта, количество файлов в директории по расширению - PullRequest
0 голосов
/ 15 марта 2011

Я хочу посчитать количество файлов по их расширению через скрипт в терминале;лайк:sm1 @ smth: ~ $ ./scriptname.pl расширение пути/ home / dir / содержит 5 файлов * .extention

Ответы [ 8 ]

2 голосов
/ 15 марта 2011

Вот эквивалент с 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 голосов
/ 15 марта 2011
find -name "*.pdf" -exec echo -n "1" ";" | wc -c 

не завершится ошибкой, если имя файла содержит '\ n', что не является недопустимым.Найти посещения подкаталогов тоже.

Почему вы хотите использовать Perl?

1 голос
/ 15 марта 2011

Прыжки в конце:)

#!/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>
1 голос
/ 15 марта 2011

В shell используйте globbing и команду wc.

ls -d /some/path/*.ext | wc -l

Или вы можете сделать это в Perl с помощью 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;
1 голос
/ 15 марта 2011

Вот функция, которая подсчитывает файлы, необязательно по расширению:

countfiles() {
   command find "${1:-.}" -type f -name "${2:-*}" -print0 | command tr -dc '\0' | command wc -c
   return 0
}

countfiles . "*.txt"

Использование -print0 гарантирует, что количество файлов остается правильным в случае, если есть имена файлов со встроенными символами новой строки "\ n".

0 голосов
/ 15 марта 2011

Очень просто:

echo ${DIR}/*.${EXT} | wc -w
0 голосов
/ 15 марта 2011
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
0 голосов
/ 15 марта 2011

Следующая команда в консоли выдаст вам количество файлов в каталоге DIR с расширением EXT.

ls DIR | grep .*\.EXT$ | wc | awk '{print $1}'

Вы можете отформатировать сообщение в соответствии с вашими требованиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...