繁体   English   中英

Linux / Bash - 为“find”创建循环以输出到文件

[英]Linux/Bash - Create Loop for “find” to output to a file

抱歉,如果这已经得到解答,我对Linux有些新意,但我没有在这里看到任何目标。

无论如何,我正在运行这个命令:

find 2013-12-28 -name '*.gz' | xargs zcat | gzip > /fast/me/2013-12-28.csv.gz

问题是我需要在大约250个不同日期运行此命令,因此一次执行此命令非常繁琐。

我想要做的是有一个脚本,它会在“查找”之后的1天和文件名中增加日期。 我甚至不知道这会是什么样的,使用什么命令等等。

背景:

find命令正在一个文件夹中使用,该文件夹中包含1天的数据文件夹。 每天的文件夹包含24个子文件夹,每个子文件夹包含大约100个gzip压缩文件。 所以find命令必须从文件夹向上2级,因为它将扫描每个文件夹以组合所有数据。 最终结果是所有压缩文件都合并为一个大型压缩文件。

如果有人可以帮助它将非常感激,否则我有大约250多个命令要执行,这显然会很糟糕。

这样的事情怎么样?

prev_date="2013-12-28"
for i in {0..250}; do
    next_date=$(date -d"$prev_date +1 day" +%Y-%m-%d)
    prev_date=$next_date
    find $next_date -name '*.gz' | xargs zcat | gzip > /fast/me/$next_date.csv.gz
done

它应该遍历250个日期,如:

2014-08-27
2014-08-28
2014-08-29
2014-08-30
2014-08-31
2014-09-01
2014-09-02
2014-09-03
2014-09-04
2014-09-05

如果日期是连续的,jmunsch的解决方案非常有效。 否则你可以这样做:

(已编辑以使用冒号替换短划线字符)

for folderName in $(find . -type d -mindepth 1 -maxdepth 1 )
do
   date=$(basename $folderName)
   dateWithColons=$(echo $date | sed "s#-#:#g")  # this will replace - with :
   find "$folderName" -name '*.gz' | xargs zcat | gzip > /fast/me/$dateWithColons.csv.gz
done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM