我正在为我的一个程序编写一个函数,需要搜索一些文件夹,直到我们找到一个名为“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 /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*
}
答案 0 :(得分:1)
此代码:
for i in $USERS;
do
if [ ! -d "userfiles" ];
then
tar -zcvf userfiles-$NAME-"$IDS".tar.gz $USERS
fi
done;
不会做你所描述的应该做的事情。相反,如果文件夹userfiles
当前工作目录中存在不,则会多次tar 所有用户文件夹。< / p>
尝试这样的事情:
for d in $USERS; do
if [ -d "${d}userfiles" ]; then
tar -zcvf "userfiles-$NAME-$IDS.tar.gz" "${d}userfiles"
fi
done
答案 1 :(得分:0)
我会用
来保存猫的无用用法 NAME=$(sed -e "s/ //g" $USER_HOME/server.txt)
看起来你从不在函数中使用$USERS
和$IDS
。
答案 2 :(得分:0)
这个脚本中有几件东西不起作用,我不确定我是否全部找到了它们:
您真的想要检查 以下{{1>}以下3级的所有目录吗?我希望有更严格的东西(也就是说,只在带有某些名字的子目录中)或更宽松的东西(即所有目录最多在/var/www/home/user/area/
以下3级)。
/var/www/home/user/area/
循环使用变量for
,但i
未在循环体中的任何位置使用。那不行。
测试i
始终在相同(即当前)目录中执行。这也无济于事。
我不理解if [ ! -d "userfiles" ]
中的否定。
if [ ! -d "userfiles" ]
的论点是tar
。我期待像$USERS
。