如何在执行文件操作时排除文件夹,即cp等。
我目前使用通配符*对所有人应用文件操作,但我需要排除一个文件夹。
我实际想要使用的命令是chown
来更改目录中所有文件的所有者,但我需要排除一个子目录。
答案 0 :(得分:18)
如果您使用bash并通过shopt -s extglob
启用extglob,则可以使用!(<pattern>)
排除给定的模式。
答案 1 :(得分:8)
find dir_to_start -name dir_to_exclude -prune -o -print0 | xargs -0 chown owner
find dir_to_start -not -name "file_to_exclude" -print0 | xargs -0 chown owner
答案 2 :(得分:5)
for file in *; do
if [ $file != "file_I_dont_want_to_chown" ]
then
chown -R Camsoft $file
fi
done
答案 3 :(得分:4)
结合unix的多个小型锐利工具: 要排除文件夹“foo”
% ls -d * | grep -v foo | xargs -d "\n" chown -R Camsoft
答案 4 :(得分:1)
对于这种情况,我建议使用find。您可以使用-not -iwhilename'PATH'指定要排除的路径。然后使用exec执行要执行的命令
find . -not -iwholename './var/foo*' -exec chown www-data '{}' \;
虽然这可能对您的情况有所帮助,但我也看到脚本设置了不可变标志。确保在完成后删除标记,以便在脚本被提前杀死的情况下使用陷阱(注意:从脚本运行,陷阱代码在bash会话退出时运行)。在我的选择中有很多麻烦,但在某些情况下它很好。
cd /var
trap 'chattr -R -i foo > /dev/null 2>&1' 0
chattr -R +i foo
chown -R www-data *
答案 5 :(得分:0)
另一个选项可能是临时删除该文件/文件夹的权限 在Unix中,你需要'x'权限才能输入目录。
编辑:显然,如果您要备份实时生产数据库,这不是可行的 - 但是在将文档复制到USB密钥时排除“有趣图像”集合是可以实现的。