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

发布于 2024-08-18 01:20:14 字数 132 浏览 2 评论 0原文

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

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

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

How do you exclude a folder when performing file operations i.e. cp etc.

I would currently use the wild card * to apply file operation to all, but I need to exclude one single folder.

The command I'm actually wanting to use is chown to change the owner of all the files in a directory but I need to exclude one sub directory.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

我为君王 2024-08-25 01:20:14

如果您使用 bash 并通过 shopt -s extglob 启用 extglob,那么您可以使用 !() 排除给定的模式。

If you're using bash and enable extglob via shopt -s extglob then you can use !(<pattern>) to exclude the given pattern.

错爱 2024-08-25 01:20:14
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
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
宫墨修音 2024-08-25 01:20:14
for file in *; do
  if [ $file != "file_I_dont_want_to_chown" ]
    then
      chown -R Camsoft $file
  fi
done 
for file in *; do
  if [ $file != "file_I_dont_want_to_chown" ]
    then
      chown -R Camsoft $file
  fi
done 
悲念泪 2024-08-25 01:20:14

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

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

Combine multiple small sharp tools of unix:
To exclude the folder "foo"

% ls -d * | grep -v foo | xargs -d "\n" chown -R Camsoft
酸甜透明夹心 2024-08-25 01:20:14

对于这种情况我建议使用 find。您可以使用 -not -iwhilename 'PATH' 指定要排除的路径。然后使用 exec 执行您想要执行的命令

find . -not -iwholename './var/foo*' -exec chown www-data '{}' \;

虽然这可能对您的情况有帮助,但我也看到脚本设置了不可变标志。确保在完成后删除该标志,您应该为此使用 trap ,以防脚本被提前终止(注意:从脚本运行,陷阱代码在 bash 会话退出时运行)。我的选择有很多麻烦,但在某些情况下是好的。

cd /var
trap 'chattr -R -i foo > /dev/null 2>&1' 0
chattr -R +i foo
chown -R www-data *

For this situation I would recommend using find. You can specify paths to exclude using the -not -iwhilename 'PATH'. Then using exec you execute the command you want to execute

find . -not -iwholename './var/foo*' -exec chown www-data '{}' \;

Although this probably does help for your situation I have also see scripts set the immutable flag. Make sure you remove the flag when your done you should use trap for this just in case the script is killed early (note: run from a script, the trap code runs when the bash session exits). A lot of trouble in my option but it's good in some situations.

cd /var
trap 'chattr -R -i foo > /dev/null 2>&1' 0
chattr -R +i foo
chown -R www-data *
掐死时间 2024-08-25 01:20:14

另一种选择可能是暂时删除该文件/文件夹的权限。
在 Unix 中,您需要目录的“x”权限才能进入该目录。

编辑:显然,如果您正在备份实时生产数据库,则这不起作用 - 但在将文档复制到 USB 密钥时排除“有趣的图像”集合,这是合理的。

Another option might be to temporarily remove permission on the that file /folder.
In Unix you need 'x' permission on a directory to enter it.

edit: obviously this isn't goign to work if you are backing up a live production database - but for excluding your 'interesting images' collection when copying documents to a USB key it's reasoanable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文