我的问题类似于这个,但我想在复制/上传文件时递归地排除一些目录。具体来说,我想从我上传的整个代码库中排除 .git 文件夹(它包含子存储库,一些子存储库的结构相当深)
我可以使用“-”键并取消选择 .git 对当前目录执行此操作,但有没有办法以递归方式执行此操作?
答案1
Midnight Commander 对子目录操作没有那种控制权。有点像“全有或全无”类型的交易。就像你说的,你可以控制顶级条目,但仅此而已。
我想您可以编写某种脚本以在 F2 菜单中使用它......
另一种方法,有点笨拙,但可以起作用......
find . -type d -name ".git" -exec chmod 000 "{}" \;
这会导致所有 .git 子目录无法读取,MC 会弹出一个错误对话框,告诉它“继续”并继续处理。
然后:
find . -type d -name ".git" -exec chmod 750 "{}" \;
恢复所需的权限。(我自己使用 750 和 640,许多人更喜欢 755 和 644... 使用你喜欢的任何值代替那里的“750”)
哈!与我的“将其放入 F2 菜单”想法相结合...您可以将这两个命令放入 F2 菜单中...使这几乎(几乎!)变得无痛。
编辑:
按要求:
#
# Restore permissions for any .git subdirectories to 755
g Restore .git directories to 755 permissions
if [ "x$PWD" = "x$HOME" ]; then
exit
fi
find . -type d -name ".git" -exec chmod 755 "{}" \; 2>/dev/null
#
# Remove permissions for any .git subdirectories
G Hide .git directories with 000 permissions
if [ "x$PWD" = "x$HOME" ]; then
exit
fi
find . -type d -name ".git" -exec chmod 000 "{}" \; 2>/dev/null
#
将其保存到文件'~/.config/mc/菜单‘
如果此文件已经存在,则将其附加到末尾(某些内容必须放在文件的开头,不要弄乱它)。
如果此文件不存在,则此处的条目将替换通常可见的所有默认 F2/User 菜单条目。如果您需要这些菜单条目(有些很方便!),那么寻找文件名为菜单(通常发现于/etc/mc/),将其复制到~/.config/mc/菜单,再次将上述内容附加到末尾。结束!
如果你使用的是旧版本的麦克,你可能需要搜索菜单文件,以及菜单文件需要位于~/.mc.菜单……是的,有点复杂。但最近,麦克修改了配置文件位置以反映最佳实践(XDG 建议),并将所有内容移至〜/ .config / mc /。mc(1) 手册页非常有用,搜索用户菜单。
这将添加两个命令:
g (lowercase g) which will RESTORE the 755 permissions for any .git subdirs
G (uppercase g) which will REMOVE the permissions (set to 000) from any .git subdirs
我添加了一个测试来防止在你的 $HOME 中执行此操作,尽管这不会造成破坏......只是不适合在那里执行此操作。
享受!