我假设你可能有子目录,并希望找到这个目录树中的所有文件。
这第一个代码块(可以放在脚本中)是“安全的”(什么都不做),但会帮助你看看会做什么。
datep="[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]"
dir="PUT_THE_FULL_PATH_OF_YOUR_MAIN_DIRECTORY"
while IFS= read -r file
do
name="$(basename "$file")"
[[ "$name" =~ ^($datep)\ -\ $datep\ -\ ([^[:space:]]+)\ -\ $datep.*[.](.+)$ ]] || continue
date="${BASH_REMATCH[1]}"
imgname="${BASH_REMATCH[2]}"
ext="${BASH_REMATCH[3],,}"
dir_of_file="$(dirname "$file")"
target="$dir_of_file/$date - $imgname.$ext"
echo "$file"
echo " would me moved to..."
echo " $target"
done < <(find "$dir" -type f)
确保输出是你想要的和期待。我无法测试你的实际文件,如果这个脚本没有产生完全令人满意的结果,我不承担任何责任。如果您没有可靠的,经过检查的备份,请不要盲目地让任何人(包括我)通过从互联网上复制和粘贴代码来混淆您的宝贵数据。
一旦确认,决定是否要采取不用于测试任何机会写上一些人的代码有机会和替换echo
开始与这三个连续的行:
mv "$file" "$target"
注意文件名必须匹配到一个非常严格的模式才能进行处理,所以如果您注意到某些文件没有被处理,那么该模式可能需要修改。
文件名应该保留的空间? – Inian