我有一个目录,里面有数千个文件,格式为 LastnameFirstnameYYYYMMDD.pdf。姓和名始终采用标题大小写。
我想提取姓氏,这样我就可以将这些文件移动到 {姓氏首字母}/姓氏/完整文件名的目录结构中。例如:DoeJohn20190327 将移动到 D/Doe/DoeJohn20190327
答案1
这里有解决方案。我测试了一下,它按照你解释的那样创建了文件夹。
for filename in *.pdf
do
echo "Processing file $filename "
first_letter="${filename:0:1}"
mkdir -p $first_letter #if already exists won't print error
last_name=$(echo $filename | sed 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' |awk '{print $1}')
mkdir -p $first_letter/$last_name
mv $filename $first_letter/$last_name
done
答案2
如果姓氏始终是以大写字母开头的最短尾随字符串(例如,没有复合姓氏),则可以使用形式的 shell 参数扩展来${parameter%pattern}
代替正则表达式解决方案。
前任。
for f in [[:upper:]]*[[:upper:]]*; do
d="${f:0:1}/${f%[[:upper:]]*}/"
echo mkdir -p "$d"
echo mv "$f" "$d"
done
mkdir -p D/Doe/
mv DoeJohn20190327 D/Doe/
echo
当您确信其运行正确时,请删除s。
例如参数扩展