目前,我有这个标记,文件夹是相应命名的:
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月
另外,我的其他代码是否正常工作或我在那里遇到错误?
答案 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