Bash 通过在文件夹中搜索特定文件夹名称来压缩用户文件的脚本
我正在为我的一个程序编写一个函数,该程序需要搜索多个文件夹,直到找到一个名为“userfiles”的文件夹,然后对该文件夹加焦油,给出找到它的文件夹的文件名。下面的方法是最好的方法吗Bash 通过在文件夹中搜索特定文件夹名称来压缩用户文件的脚本,bash,shell,loops,scripting,Bash,Shell,Loops,Scripting,我正在为我的一个程序编写一个函数,该程序需要搜索多个文件夹,直到找到一个名为“userfiles”的文件夹,然后对该文件夹加焦油,给出找到它的文件夹的文件名。下面的方法是最好的方法吗 compress(){ NAME=$(cat $USER_HOME/server.txt | sed -e "s/ //g") USERS=/var/www/home/user/area/*/*/*/ IDS=${PWD##*/} # Apache Logs tar -zcvf logs-$NAME.tar.gz
compress(){
NAME=$(cat $USER_HOME/server.txt | sed -e "s/ //g")
USERS=/var/www/home/user/area/*/*/*/
IDS=${PWD##*/}
# Apache Logs
tar -zcvf logs-$NAME.tar.gz /var/log/apache2
# User Logs
for i in $USERS;
do
if [ ! -d "userfiles" ];
then
tar -zcvf userfiles-$NAME-"$IDS".tar.gz $USERS
fi
done;
# Linux Logs
tar -zcvf linux-logs-$NAME.tar.gz /var/log/auth.log* /var/log/syslog* /var/log/kern.log* /var/log/mail.log*
}
我会把猫的无用用途保留下来
NAME=$(sed -e "s/ //g" $USER_HOME/server.txt)
您似乎从未在函数中使用过$USERS
和$IDS
。此代码:
for i in $USERS;
do
if [ ! -d "userfiles" ];
then
tar -zcvf userfiles-$NAME-"$IDS".tar.gz $USERS
fi
done;
不会做你描述的它应该做的。相反,如果一个文件夹userfiles
不存在于当前工作目录中,它将多次对所有用户文件夹进行tar
试着这样做:
for d in $USERS; do
if [ -d "${d}userfiles" ]; then
tar -zcvf "userfiles-$NAME-$IDS.tar.gz" "${d}userfiles"
fi
done
此脚本中有几项内容不起作用,我不确定是否都找到了:
/var/www/home/user/area/
?我希望有更严格的限制(即,仅在带有特定名称的子目录中)或更宽松的限制(即,所有目录最多低于/var/www/home/user/area/
)3级)for
循环使用变量i
,但是i
在循环体的任何地方都不使用。那不行。那也不行
if[!-d“userfiles”]
中的否定tar
的参数是$USERS
。我希望类似于“$I/userfiles”
假设
sed
命令仅用于删除前导或尾随空格,NAME=($(<$USER\u HOME/server.txt))
是一种稍微复杂的方法,可以在不产生外部进程的情况下实现同样的效果。感谢cat提示-我已经对脚本的其余部分进行了解散,这是我以前没有做过的。感谢我将对此进行一次分析。感谢它的工作-$id不会被放入文件名中,只有最后一个dir被添加到zip中。作为一种解决方法,我删除了$id并将tar添加到'r'以附加tar