【问题标题】:How to change the permissions on the files nested in subdirectories with single ack command?如何使用单个 ack 命令更改嵌套在子目录中的文件的权限?
【发布时间】:2023-10-11 02:20:01
【问题描述】:

我有以下目录树。

在移入/移出 VirutalBox 时,文件权限会发生变化。 所以,我知道/不知道 ack 可用于从命令行递归地执行此操作。

有人可以显示ackchmod 644 的所有*.rb 文件的命令吗?

[~/dotfiles (master)⚡] ➔ tree
.
|-- cap_bash_autocomplete.rb
|-- dotfile_bash_aliases
|-- dotfile_bashrc
|-- rake_bash_autocomplete
|-- tidbits
|   |-- README
|   |-- lib
|   |   `-- aliasdir.rb
|   |-- mhsrc
|   |-- proxy.pac
|   |-- rails-template.rb
|   `-- tasks.thor
`-- usage

【问题讨论】:

    标签: linux ubuntu chmod


    【解决方案1】:

    你不需要 xargs。 find 有选项exec, execdirok 内置:

    find ~/dotfiles -name "*.rb" -exec chmod 644 {} +
    

    execdir 从文件所在的子目录执行命令,ok 要求确认。您可以以\;+ 结束命令,加号将一次执行多个文件,这有时会获得更多性能,但通常不相关,有时可能会损害性能,甚至不起作用(如果底层命令不允许处理多个文件)。

    【讨论】:

    • 有趣且有用。仍然无法理解 linux 命令链,所以这很容易知道。谢谢!
    • 链接并不难 - 只是 a | b | c | d - 仅此而已。 :)
    【解决方案2】:

    我不知道ack 是什么,但你可以使用标准的 shell 命令来做到这一点:

    find <top of directory tree> -name \*.rb | xargs chmod 644
    

    【讨论】:

    • 我试试看。顺便说一句,这就是 ack 是 fosscasts.com/screencasts/15-Power-Searching-with-Ack
    • 我试过了。这样可行。谢谢。现在还有一种情况,如果我想丢弃一些目录怎么办??
    • find ~/dotfiles -wholename ’~/dotfiles/skip’ -prune -o -name "*.rb | -exec chmod 644 {} +" 您可以阅读man find 了解更多信息,并将答案标记为有帮助(单击向上箭头),以指导其他人。