如果没有,则shell脚本mkdir,并每天提交MV文件



我需要在具有150.000个zip文件的DIR中检查使用这种格式:

log_from_2012_08_14-11:57:12_To_2012_08_14-13:57:12.zip
log_from_2012_08_14-13:57:12_To_2012_08_14-15:57:12.zip
log_from_2012_08_14-15:57:12_To_2012_08_14-17:57:12.zip

如果有名称等于文件当天的dir:

2012_08_14 

然后将存在的所有文件从_2012_08_14移动到该dir,如果不创建

(mkdir日期 %y_%m_%d)

,然后检查自八月至11月的八月以来的每一天,从DOENST拥有自己的DIR的每一天的文件创建它并将其移动到那里。

cd /relevant/log/directory
# Create the necessary sub-directories
ls *from_????_??_??-??:??:??_To_????_??_??-??:??:??.zip |
sed 's/.*from_([0-9]{4}_[0-9][0-9]_[0-9][0-9]).*/1/' |
sort -u |
xargs mkdir -p
# Move the files into the sub-directories
ls *from_????_??_??-??:??:??_To_????_??_??-??:??:??.zip |
sed 's/.*from_([0-9]{4}_[0-9][0-9]_[0-9][0-9]).*/mv & 1;/' |
sh -x

-x是可选的,但是向您展示了发生的情况。我假设您的文件名称都不包含空格或新线。我还假设没有具有字母数字的文件,其中壳模式中的?有望与数字匹配。如果您必须完全偏执,则可以将每个?扩展到[0-9],或者修改sed脚本以丢弃与不匹配的名称等。

快速而肮脏的bash解决方案

for file in log_from*.zip; do
    dirname=${file#log_from_}
    dirname=${dirname%%-*}
    [ ! -d "$dirname" ] && mkdir "$dirname"
    mv "$file" "$dirname"
done 

相关内容

  • 没有找到相关文章

最新更新