背景:当我们的虚拟机和windows系统共享windows上的一个目录(记为:A)时,把该目录下的目录(记为B)移动(mv)到linux下的任意目录下,这个目录B及下面的子目录或文件的权限都是rwx(777),这是他们在windows下的权限。因此用ll命令把这些文件列出来时,就会发现明显的不一样,原因就是权限不同。
因此,我写了个bash 脚本,递归的将这些移动过来的文件的权限修改为默认值。代码如下:
#!/bin/bash
# 修改指定目录的子目录或文件到默认权限
# 下面的函数是递归修改子目录及文件的权限,但是还有一种方法就是复制整个目录,权限会自然就设置成默认的了
function chmodDefault()
{
if [ -d "$1" ]; then
chmod 755 "$1"
fi
for i in $1/*
do
if [ -f "$i" ]; then
chmod 644 "$i"
elif [ -d "$i" ]; then
chmod 755 "$i"
chmodDefault "$i"
fi
done
}
if [ "$1" = "" ]; then
echo "Usage: sh $0 <dir>"
else
chmodDefault "$1"
fi
经测试,发现这个脚本还是正确的。但是又发现了另外一种改变移动过来的目录的权限的方法,就是用复制命令(cp),这相当于以当前用户的身份新建目录,所以权限自然地就是默认值了!
如:cp /mnt/hgfs/A/aa /home/zcm/download/