resort-file
根据csv重归档文件
需求:根据excel中的文件列表,将excel进行简单处理成csv格式,使用sed、awk等结合正则对图片文件按照年月的格式来进行重新归档并输出相关日志。
代码如下:
#!/bin/bash##**************************************************# Author: AGou-ops *# E-mail: agou-ops@foxmail.com *# Date: 2021-08-10 *# Description: Re-sort picture file *# Copyright 2021 by AGou-ops.All Rights Reserved *#**************************************************set -euo pipefailset -o errexit# -------base_dir=./gifpath_pic=./path_pics.csv
# Create destination Dirscreate_dirs(){ # dirs_name=`tree -dfi "${base_dir}" | grep -v "dire*" | sed "s/gif/output/g" ` # mkdir -pv $dirs_name && echo -e \n\n"success" || echo "\n\nfailed" dirs_name=`awk -F, '{print "./"$1}' "${path_pic}" | sed "s@./ @./output/@g" | uniq` mkdir -pv $dirs_name && echo -e "\033[42;37m CREATE DIRs SUCCESS \033[0m\n\n" || echo -e "\033[41;37m FAILED \033[0m"}create_dirs# Sleep 2 seconds to wait create_dirssleep 1echo -e "\n\n\033[47;30m ============================== TASK START ============================== \033[0m\n"
# Get old filepath and new filepathtree -if "${base_dir}" | egrep '*.gif$|*.png' | tr "." "_" | tr " " "<" | tr "-" ">" > ./old_filepath.txtawk -F, '{print "./"$1"/"$2}' "${path_pic}" | sed "s@./ @./output/@g" | tr "." "_" | tr " " "<" | tr "-" ">" > ./new_filepath.txt
`dos2unix old_filepath.txt``dos2unix new_filepath.txt`
sleep 2# old_filepath=`tree -if "${base_dir}" | egrep '*.gif$|*.png|*.jpg'`# new_filepath=`awk -F, '{print "./"$1"/"$2}' "${path_pic}" | sed "s@./ @./output/@g"`
# Create dict to store filename(key) and filepath(value)declare -A old_path_dictwhile read line; do key=$(basename $line) data=$(dirname $line) old_path_dict[$key]=$datadone < old_filepath.txt
declare -A new_path_dictwhile read line; do key=$(basename $line) data=$(dirname $line) new_path_dict[$key]=$datadone < new_filepath.txt
# Empty file content: > ./match_result.txt: > ./final_result.txt: > ./final_result2.txt: > ./final_result3.txt
for i in $(echo ${!new_path_dict[*]});do # echo "$i : ${new_path_dict[$i]}" for j in $(echo ${!old_path_dict[*]});do if [ "$i" == "$j" ];then echo -e "【MATCHED】 $i\t==\t$j \t\t【${new_path_dict[$i]}\t<==>\t${old_path_dict[$j]}】" >> ./match_result.txt# ---------------- IMPORTANT STEP -------------------- old_absolute_path=`echo -e "${old_path_dict[$j]}/$j" | tr "_" "." | tr "<" " " | tr ">" "-"` new_absolute_path=`echo -e "${new_path_dict[$j]}/$j" | tr "_" "." | tr "<" " " | tr ">" "-"` # test=`echo -e ${old_path_dict[$j]}/\t$j | tr "_" "." | tr "<" " " | tr ">" "-""` test1=`echo -e "${old_path_dict[$j]}/\t$j" | tr "_" "." | tr "<" " " | tr ">" "-"` test2=`echo -e "${new_path_dict[$j]}/\t$j" | tr "_" "." | tr "<" " " | tr ">" "-"` dest_path=`echo -e "${new_path_dict[$j]}/" | tr "_" "." | tr "<" " " | tr ">" "-"` echo -e "$old_absolute_path\t==>\t$new_absolute_path" >> ./final_result.txt echo $test1 >> ./final_result2.txt echo $test2 >> ./final_result3.txt mv --verbose "$old_absolute_path" "$dest_path" && echo -e "\033[42;37m SUCCESS \033[0m" || echo -e "\033[41;37m FAILED \033[0m" fi donedone# test dict# echo "${new_path_dict["进项发票_png"]}"# echo "${old_path_dict["进项发票_png"]}"
# old_filepath_2_dict=``# new_filepath_2_dict=``
# for i in "$all_filepath";do# # path1=`dirname "$i"`# # filename1=`basename "$i"`# # echo -e "$path1\t---\t$filename1"# # break# for j in "$new_filepath";do# filename1=`basename "$i"`# path2=`dirname "$j"`# filename2=`basename "$j"`# # echo -e "$path2\t---\t$filename2"# done# done# get_filename=$(basename $all_filepath)
echo -e "\n\n\033[47;30m ============================== TASK END ============================== \033[0m\n"
# Clean useless files`rm ./new_filepath.txt ./old_filepath.txt`