gpt4 book ai didi

linux - shell脚本过滤du并通过子文件夹中文件内的字符串查找

转载 作者:太空狗 更新时间:2023-10-29 12:22:00 28 4
gpt4 key购买 nike

我在 cygwin 上运行了以下命令:

find /cygdrive/d/tmp/* -maxdepth 0 -mtime -150 -type d | xargs du --max-depth=0 > foldersizesreport.csv

我打算使用此命令执行以下操作:

对于在过去 150 天内修改过的 /d/tmp/ 下的每个文件夹,检查其总大小(包括其中的文件)并将其报告到文件 foldersizesreport.csv然而,这对我来说还不够好,因为它在每个

/d/tmp/subfolder1/somefile.properties
/d/tmp/subfolder2/somefile.properties
/d/tmp/subfolder3/somefile.properties
/d/tmp/subfolder4/somefile.properties

正如您在每个子文件夹 X 中看到的那样,有一个名为 somefile.properties 的文件它里面有一个属性SOMEPROPKEY=3808612800100(以及其他属性)

这是以毫秒为单位的时间,我需要更改命令,而不是 -mtime -150 它只会包含在整个计算中subfolderX 其中有一个文件 somefile.properties 其中 SOMEPROPKEY=3808612800100 是 future 的毫秒时间,如果值 SOMEPROPKEY=23948948是过去然后根本不包括文件夹在 foldersizesreport.csv 中,因为它与我无关。

所以结果报告应该是这样的:

/d/tmp/,subfolder1,<itssizein KB>
/d/tmp/,subfolder2,<itssizein KB>

如果 subfolder3 有一个 SOMEPROPKEY=34243234(过去的时间以毫秒为单位),那么它不会在那个 csv 文件中。

所以基本上我在寻找:

find /cygdrive/d/tmp/* -maxdepth 0 -mtime -150 -type d | 
<only subfolders that have in them property in file
SOMEPROPKEY=28374874827 - time in ms in future and
not in past | xargs du --max-depth=0 > foldersizesreport.csv

最佳答案

这是整个事情的 perl 版本:

过滤器.pl

#!/usr/bin/perl

use strict;
use warnings;
use File::Spec;

# -------------------------- configuration ----------------------------
my %CFG = (
'propertiesFile' => 'somfile.properties',
'propertyKey' => 'SOMEPROPKEY',
'duCommand' => 'du -Bk -s'
);
# ---------------------------------------------------------------------

while (my $dir = <>) {
chomp $dir;
open(my $F, File::Spec->catfile($dir, $CFG{"propertiesFile"})) || next;
my ($match) = grep /$CFG{"propertyKey"}=\d+/, <$F>;
close $F;

if ($match =~ m/$CFG{"propertyKey"}=(\d+)/) {
my ($volume, $directories, $file) = File::Spec->splitpath($dir);
my $command = "$CFG{'duCommand'} $dir";
# on Windows you might need $volume this assumes Unix-like filesystem
print $directories . "," . $file . "," .
`$command | cut -f1` if $1 > time();
}
}

exit;

用法

find /home/regis/stackoverflow/2937940/* -maxdepth 0 
-mtime -150 -type d | ./filter.pl

输出(你的样本)

/home/regis/stackoverflow/2937940/,subfolder1,16K
/home/regis/stackoverflow/2937940/,subfolder2,16K
/home/regis/stackoverflow/2937940/,subfolder4,16K

关于linux - shell脚本过滤du并通过子文件夹中文件内的字符串查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2937940/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com