按日期重新构建目录中的文件

时间:2014-12-16 02:24:12

标签: macos bash shell directory command

目前,我有这个标记,文件夹是相应命名的:

YYYY
----DD-MM-YYYY
--------FILES
--------FILES
--------FILES

我想做的是,不是每年的每个日期都有不同的文件夹,我想将它们分为月份,然后是日期,例如:

YYYY
----MM
--------DD-MM-YYYY
------------FILES
------------FILES
------------FILES

所以一旦完成就会说出这样的话:

2010
----May
--------01-05-2010
------------a.jpg
------------b.jpg
------------c.jpg
----June
--------06-06-2010
------------1.jpg
------------2.jpg
------------3.jpg

我对如何继续下去没有太多了解,但这是我迄今为止尝试过的并没有成功:

#!/bin/bash
currentYear="2010"
DIR="/path/to/year/folder/$currentYear"
target=$DIR
cd "$DIR"

for folder in *; do
    if [[ -d $folder ]]; then
        # We are a directory, assume this is a date folder
        dateString="$folder"
        month=???
        if [ ! -d "$target/$month" ]; then
            mkdir "$target/$month"
        fi
        mv '$folder" "$target/$month"
    fi
done

我认为我真正坚持的唯一一件事就是如何获得漂亮的“月份”名称,例如:01-11-2010需要从此状态字符串获取11月

另外,我的其他代码是否正常工作或我在那里遇到错误?

1 个答案:

答案 0 :(得分:2)

您可以使用date -d yourdate +%B(或带有+%b的缩写名称)获取月份名称。 您需要格式化日期,date需要YYYYMMDD或YYYY-MM-DD。由于你只需要一个月,你可以作弊。

#!/bin/bash
currentYear=2010
DIR="/path/to/year/folder/$currentYear"
target=$DIR
cd "$DIR"

for folder in *; do
    if [[ -d $folder ]]; then
        dateString=$folder
        month=$(date -d "2000${dateString:3:2}01" +%B)
        mkdir -p "$target/$month"    # no need to check if it exists already
        mv "$folder" "$target/$month"
    fi
done