![BASH:根据文件名中的信息重命名和组织文件](https://linux22.com/image/164859/BASH%EF%BC%9A%E6%A0%B9%E6%8D%AE%E6%96%87%E4%BB%B6%E5%90%8D%E4%B8%AD%E7%9A%84%E4%BF%A1%E6%81%AF%E9%87%8D%E5%91%BD%E5%90%8D%E5%92%8C%E7%BB%84%E7%BB%87%E6%96%87%E4%BB%B6.png)
假设我有一堆文件,其信息用下划线分隔:
昵称_用户名_真实姓名_日期_文件名.txt
我想为每个用户名创建一个目录并重命名该文件以摆脱nickname_username_date_并将该文件(现在名为name.txt)移动到它的用户名目录中
for f in *txt
sed -F_'{$nick $user $realname $date $filename} $f
$(mkdir -p $user)
$(rename 's/???/$filename/g' $fullFileName)
$(mv $fullFileName $user)
答案1
如果我理解正确的话,这是我的尝试:
for i in *.txt; do
IFS='_' read -r -a array <<< "$i"
mkdir -p "${array[1]}" && mv "$i" "${array[1]}"/"${array[4]}"
done
创建一个数组_
作为分隔符
IFS='_' read -r -a array <<< "$i"
使用用户名创建目录"${array[1]}"
并将文件名移动"${array[4]}"
到该目录。
mkdir -p "${array[1]}" && mv "$i" "${array[1]}"/"${array[4]}"
谨慎使用