Bash:与find一起使用时,重命名命令不在子目录上工作

时间:2013-11-01 23:20:09

标签: linux bash shell

我有以下命令删除第一次出现的'|'从文件的名称,并用'!'替换它。

rootcmd -s sh -c "find . -type f | grep '|' | rename '|' '!' *"

从与其操作的文件相同的目录运行时,它可以正常工作。我们称之为子目录。但是,我有一个包含多个子目录的父目录。当我从父目录运行它时,重命名不起作用。我希望它遍历所有子目录并执行相同的操作。有趣的是,我知道命令的第一部分(减去重命名)有效:

rootcmd -s sh -c "find . -type f | grep '|'"

以上内容将返回所有子目录中包含“|”的所有文件在文件名中。但是,当我附加重命名命令时,它不会按预期重命名文件。

那里有哪些linux / bash大师可以解释或解决这个问题?

1 个答案:

答案 0 :(得分:0)

你做错了。您需要使用xargs传递find的输出,而不是rename something something *,如下所示:

rootcmd -s sh -c "find . -type f | grep '|' | xargs rename '|' '!'"