从文件名中获取日期并分类到文件夹中?

Get date from filename and sort into folders?

我 运行 wget 从 FTP 服务器获取数据,如下所示:

wget -r -nH -N --no-parent ftp://username:password@example.com/ -P /home/data/

所有文件的格式都与此类似:

2016_07_10_bob-randomtext.csv.gz
2016_07_11_joe-importantinfo.csv.gz

现在它正在将所有这些文件放入 /home/data/

我想做的是从文件名中获取时间,并根据日期将其放入自己的文件夹中。例如:

/home/data/2016_07_10/2016_07_10_bob-randomtext.csv.gz
/home/data/2016_07_11/2016_07_11_joe-importantinfo.csv.gz

基于 answers here,可以从文件名中获取日期。但是,我不太确定如何将其自动转换为文件夹...

抱歉,如果这有点令人困惑。如有任何帮助或建议,我们将不胜感激。

将所有文件下载到一个目录中,/home/files

destination=/home/data
for filename in /home/files/*; do
    if [[ -f "$filename" ]]; then          # ignore it if it's a directory (not a file)
        name=$(basename "$filename")
        datedir=$destination/${name:0:10}  # first 10 characters of the filename
        mkdir -p "$datedir"                # create the directory if it doesn't exist
        mv "$filename" "$datedir"
    fi
done