我是unix的新手。我得到了这样的要求。 我在服务器中有xml文件夹。在该文件夹中,每天,我将在一个文件夹中为每个员工获取不同的员工详细信息。
/server/user/home/xml/e1100123/Employeedetails.xml
/server/user/home/xml/e1100123/Employeesalary.xml
/server/user/home/xml/e1100123/Employeeleaves.xml
/server/user/home/xml/e1100123/Employeestatus.xml
/server/user/home/xml/e1100155/Employeedetails.xml
/server/user/home/xml/e1100155/Employeesalary.xml
/server/user/home/xml/e1100155/Employeeleaves.xml
/server/user/home/xml/e1100155/Employeestatus.xml
我必须使用filename_employeenumber将所有员工分组到一个文件夹中,如下所示。
/server/user/home/xml/allemployees/Employeedetails-e1100123.xml
/server/user/home/xml/allemployees/Employeesalary-e1100123.xml
/server/user/home/xml/allemployees/Employeeleaves-e1100123.xml
/server/user/home/xml/allemployees/Employeestatus-e1100123.xml
/server/user/home/xml/allemployees/Employeedetails-e1100155.xml
/server/user/home/xml/allemployees/Employeesalary-e1100155.xml
/server/user/home/xml/allemployees/Employeeleaves-e1100155.xml
/server/user/home/xml/allemployees/Employeestatus-e1100155.xml
如何在unix shell脚本中编写代码?
谢谢...... 西
答案 0 :(得分:0)
你想要的剧本的裸骨可能是这样的:
<强> script.sh 强>
#!/bin/bash
base_dir=/server/user/home/xml
all_dir=${base_dir}/allemployes
e_dirs=$(ls -d ${base_dir}/e*)
e_files=(Employeedetails.xml Employeesalary.xml Employeestatus.xml Employeeleaves.xml)
if [ ! -d "${base_dir}" ]; then
echo "ERROR: ${base_dir} doesn't exists!"
fi
if [ ! -d "${all_dir}" ]; then
echo "INFO: Creating all employees directory at ${all_dir}"
mkdir "${all_dir}"
fi
for e in ${e_dirs}; do
pushd "${e}" > /dev/null
for f in ${e_files[@]}; do
if [ ! -f ${f} ]; then
echo "ERROR: Missing ${f} file for employee $(basename ${e})"
else
new_file=${all_dir}/${f%.*}-$(basename ${e}).xml
cp "${e}/${f}" "${new_file}"
fi
done
popd > /dev/null
done
注意:
脚本假定在xml/
文件夹中只有employees文件夹,每个文件夹都以较低字符 e 开头,因此我们会e_dirs=$(ls -d ${base_dir}/e*)
脚本仅适用于每个员工文件夹中的文件Employeedetails.xml Employeesalary.xml Employeestatus.xml Employeeleaves.xml
文件,忽略其他文件。
如果文件夹不存在,脚本会创建allemployes/
文件夹。
脚本制作副本而不是移动(非破坏性),因此您可以使用mv
代替cp
我还没有测试过脚本!所以请不要在实时数据上运行:)。随意修改它。
答案 1 :(得分:0)
使用此脚本:
#!/bin/bash
sourceDir=$1
destDir=$2
dirname=$(basename $1)
if [ ! -d $2 ] ; then
mkdir $2
fi
for I in $sourceDir/*
do
fname=$(basename $I)
prefix=$(echo $fname | awk -F "." 'NF{NF-=1};1')
suffix=$(echo $fname | awk -F "." '{print $NF}')
target="$destDir/$prefix-$dirname.$suffix"
cp $I $target
# I use cp(Copy) command , you can replace this to mv(Move) command .
echo $target
done
用法:
./script.sh [SOURCEDIR] [DESTDIR]
示例:
./script.sh /server/user/home/xml/e1100123/ /server/user/home/xml/allemployees/