所以我有这个看起来像的电影文件夹
Current
movie1 (1962).mkv
movie 2b (1993)
movie 2b (1993) cd1.mp4
movie 2b (1993) cd1.srt
movie 3 (2019).avi
movie 1942 (2012).mkv
我想将它们移动到另一个文件夹中,该文件夹按年包含文件夹结构,每个文件夹中都有正确的电影。如果有像电影 2b 这样的子文件夹,我不介意该文件夹被剥离或保留 - 只要它进入正确的年份就更容易了。源和目标在同一个分区中,所以我宁愿使用 mv 而不是 rsync。
Sorted
1962
1993
2012
2019
我根据论坛中的另一个问题/答案走了这么远,但我知道这是错误的,因为我不知道如何从年份中去掉括号,也不知道如何指定源文件夹和目标文件夹。
for f in *.*; do
if [ -f "$f" ] # does file exist?
then
dir=$(echo "$f" | grep -o "([0-9][0-9][0-9][0-9])" | head -1)
if [ "$dir" ] # check if string found
then
mkdir -p "$dir" # create dir
mv "$f" "$dir" # move file into new dir
else
echo "INCORRECT FILE FORMAT: \""$f"\"" # print error if file format is unexpected
fi
fi
done
有什么建议么?
使用 BASH_REMATCH 反向引用匹配的子表达式: