我假設你可能有子目錄,並希望找到這個目錄樹中的所有文件。
這第一個代碼塊(可以放在腳本中)是「安全的」(什麼都不做),但會幫助你看看會做什麼。
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