繁体   English   中英

如何在Linux中执行文件操作(例如cp,mv,rm和chown等)时排除文件夹

[英]How do I exclude a folder when performing file operations i.e. cp, mv, rm and chown etc. in Linux

如何在执行文件操作时排除文件夹,即cp等。

我目前使用通配符*将文件操作应用于所有,但我需要排除一个单个文件夹。

我实际想要使用的命令是chown来更改目录中所有文件的所有者,但我需要排除一个子目录。

如果你正在使用bash并通过shopt -s extglob启用extglob,那么你可以使用!(<pattern>)来排除给定的模式。

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
for file in *; do
  if [ $file != "file_I_dont_want_to_chown" ]
    then
      chown -R Camsoft $file
  fi
done 

结合unix的多个小锐利工具:排除文件夹“foo”

% ls -d * | grep -v foo | xargs -d "\n" chown -R Camsoft

对于这种情况,我建议使用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 *

另一个选项可能是临时删除该文件/文件夹的权限。
在Unix中,你需要'x'权限才能输入目录。

编辑:显然,如果你要备份一个实时生产数据库,这不是工作 - 但是当将文件复制到USB密钥时排除你的“有趣图像”集合是可以理解的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM