我在下面管理时间日志。
Section/TeamName/age/NAME/[Jan/Feb/Mar....etc].txt
示例:
EngineeringDepartment/TeamA/25-30/John/Jan.txt
但我想拿起每个员工的时间日志。
示例:
cp EngineeringDepartment/TeamA/25-30/John/Jan.txt ./total/John/Jan.txt
我在下面写了一个小脚本。
#!/bin/bash
find . -name "*.txt" | awk -v FS="/" '{system("mkdir -p ./total/" $5)}'
find . -name total -prune -o -type f -name "*.txt" -print | awk -v FS="/" '{src = $1 "/" $2 "/" $3 "/" $4 "/" $5 "/" $6; dst = "./total/" $5; system("cp " src " " dst)}'
这个脚本不聪明!有什么好的智能方法吗?
答案 0 :(得分:-1)
忘记查找和awk;写一个简单的shell脚本。
由于您具有固定的多级层次结构,因此可以将其与glob模式匹配:
对于每个文件,您可以执行一些基本的路径名操作来生成cp命令。
mkdir total # Example data:
for file in */*/*/*/*.txt ; do # EngDept/TeamA/25-30/John/Jan.txt
sec_team_age=$(dirname $(dirname "$file")) # EngDept/TeamA/25-30
name_month=${file#"$sec_team_age/"} # John/Jan.txt
mkdir -p $(dirname total/$name_month) # mkdir -p total/John
cp $file total/$name_month # cp $file total/John/Jan.txt
done
我没有你的数据来测试这个,但是我使用EngDept / TeamA / 25-30 / John / Jan.txt示例数据手动执行循环体的步骤,以确保字符串看起来正确。 / p>