bash - 查找文件,就地重命名 unix bash

标签 bash unix rename mv

这应该是相对微不足道的,但我已经尝试了一段时间但运气不佳。 我有一个目录,有很多子目录,每个子目录都有自己的结构和文件。

我想在工作目录下的任何目录中找到所有 .java 文件,并将它们重命名为特定名称。 例如,我想将所有 java 文件命名为 test.java

如果目录结构如下:

./files/abc/src/abc.java
./files/eee/src/foo.java
./files/roo/src/jam.java

我只想重命名为:

./files/abc/src/test.java
./files/eee/src/test.java
./files/roo/src/test.java

我的部分问题是路径中可能有空格。 我不需要担心重命名文件中的类或任何内容,只需适当的文件名即可。

如果一个目录下有多个.java文件,我不介意被覆盖,或者有提示,选择做什么(哪个都OK,它每个目录中不太可能有多个。

我尝试过的:

我查看了mvfind;但是,当我将它们放在一起时,我似乎做错了。我想确保将文件保留在当前位置并重命名,而不是移动。

最佳答案

find 的 GNU 版本有一个 -execdir 操作,可以将目录更改到文件所在的位置。

find . -name '*.java' -execdir mv {} test.java \;

如果您的find 版本不支持-execdir,那么您可以通过以下方式完成工作:

find . -name '*.java' -exec bash -c 'mv "$1" "${1%/*}"/test.java' -- {} \;

关于bash - 查找文件,就地重命名 unix bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15007058/

相关文章:

sql-server - 为什么 sp_rename 不适用于 CHECK 约束?

linux - 当我尝试通过 SSH 检查 Linux Live Server 上的 Sudo 版本时出错

vb.net - SSHAuthenticationExcetion :No suitable authentication method found to complete authentication

tfs - 重命名TFS2010团队项目

linux - Rsync with --checksum 从本地到本地?

linux - 对可以循环遍历值的变量执行 if 选择语句?

java - 使用 JavaCompiler 编译 Minecraft

android - mipsel-linux-gcc : Command not found

linux - SSH 在没有连接到 shell 脚本中的服务器的情况下退出

perl - 使用 bash/tail/perl/alias 轻松突出显示不同的字符串