我有以下文件夹结构......
/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
等...
我需要一个bash脚本以下面的方式展平这个结构。我想删除第二级文件夹(2000年,2001年,2002年等),并通过插入第二级文件夹名称并截断“_ 月份名称”来重命名第三级文件夹。结果应该是这样的......
/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
等...
答案 0 :(得分: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
答案 1 :(得分: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/????/