我有以下命令删除第一次出现的'|'从文件的名称,并用'!'替换它。
rootcmd -s sh -c "find . -type f | grep '|' | rename '|' '!' *"
从与其操作的文件相同的目录运行时,它可以正常工作。我们称之为子目录。但是,我有一个包含多个子目录的父目录。当我从父目录运行它时,重命名不起作用。我希望它遍历所有子目录并执行相同的操作。有趣的是,我知道命令的第一部分(减去重命名)有效:
rootcmd -s sh -c "find . -type f | grep '|'"
以上内容将返回所有子目录中包含“|”的所有文件在文件名中。但是,当我附加重命名命令时,它不会按预期重命名文件。
那里有哪些linux / bash大师可以解释或解决这个问题?
答案 0 :(得分:0)
你做错了。您需要使用xargs传递find的输出,而不是rename something something *
,如下所示:
rootcmd -s sh -c "find . -type f | grep '|' | xargs rename '|' '!'"