-1

我有以下文件夹结构...

/main/2000/01_January/a.jpg
/main/2000/01_January/b.jpg
/main/2000/04_April/a.jpg
/main/2000/04_April/b.jpg
/main/2000/04_April/c.jpg
/main/2001/02_February/a.jpg
/main/2002/06_June/a.jpg

ETC...

我需要一个 bash 脚本以下列方式展平这个结构。我想消除二级文件夹(2000、2001、2002 等)并通过插入二级文件夹名称并截断“ _monthname ”来重命名三级文件夹。结果应该是这样的......

/main/2000-01/a.jpg
/main/2000-01/b.jpg
/main/2000-04/a.jpg
/main/2000-04/b.jpg
/main/2000-04/c.jpg
/main/2001-02/a.jpg
/main/2002-06/a.jpg

ETC...

4

2 回答 2

1

你可以这样做:

x='/main/2000/01_January/a.jpg'
a=( $(IFS=/ read -a a <<< "$x" && echo ${a[@]}) )
y=$(printf "/%s/%s-%s/%s" ${a[0]} ${a[1]} ${a[2]/_*/} ${a[3]})
echo "$y"

输出:

/main/2000-01/a.jpg
于 2013-09-22T09:47:13.397 回答
1
find /main/????/[0-9][0-9]_*/ -type f | while read -r FILE; do
    DEST=${FILE:0:10}-${FILE:11:2}/
    echo "Moving $FILE to $DEST."
    mkdir -p "$DEST" && mv "$FILE" "$DEST"
done

# rm -fr /main/????/
于 2013-09-22T10:01:04.953 回答