关于如何重命名文件有无数的问题和答案。我是 Linux 新手,这无数种可能的方法、不同的结果和不同的配置让我感到困惑。
例如:
rename
有效,但不是递归的grep
递归工作,但不能用于搜索文件和目录名称,而不是文件内容find
有效,但是当您想使用正则表达式进行搜索时,语法很长。
还有很多关于ask ubuntu和stackoverflow的答案对我不起作用,我不知道如何调试和解决它们。
所以,原谅我再问一次。
我正在寻找一种干净、易于记忆的方式:
使用简单的正则表达式递归地重命名文件。
我已经使用以下语法对文件内容进行了处理:
grep -rl search_regex | xargs sed -i 's/old/new/g'
它工作起来没有很多挫败感。它开箱即用。它只是工作。我正在寻找一个干净整洁的可行解决方案。你能帮我吗?
找不到任何长而丑陋的东西
find
:rename
如果这是您喜欢的语法,您可以进行递归:Bash 的
globstar
选项以递归方式**
匹配 0 个或多个目录或文件,因此**/*
将递归整个目录树。您只需要将搜索模式编写为 glob 而不是正则表达式。例如,要重命名名称中包含 的所有文件foo
,您可以:您应该能够或多或少地保持与 grep 和 sed 相同的格式,但我认为您仍然需要像 find 这样的工具来为 grep 提供要搜索的文件。
编辑:更新了评论中的信息。感谢@pLumo 和@terdon 表明它对于名称中带有换行符的文件会失败。