我正在使用Linux重命名命令行工具以递归方式搜索目录,以重命名任何目录及其找到的文件。我遇到的问题是重命名命令将重命名文件的子目录,然后尝试重命名同一文件的父目录。这将失败,因为子目录已被重命名,导致“没有这样的文件或目录”
命令:
rename -f 's/foo/bar/' **
rename -f 's/Foo/Bar/' **
例如,这是一个原始文件,我想将“ foo”替换为“ bar”
文件:
/test/foo/com/test/foo/FooMain.java
失败:
Can't rename /test/foo/com/test/foo/FooMain.java /test/bar/com/test/foo/FooMain.java: No such file or directory
首选文件:
/test/bar/com/test/bar/BarMain.java
您可以从错误消息中看到它正在尝试重命名父目录,但此时子目录已被更改,导致找不到文件错误。是否有重命名命令的参数可以解决此问题,还是需要以其他方式解决此问题?
我将以另一种方式进行处理-具体来说,是使用深度优先搜索来代替shell globstar **
例如,使用GNU find
,给定:
$ tree
.
└── dir
├── foo
│ └── baz
│ └── MainFoo.c
└── Foo
├── baz
└── MainFoo.c
5 directories, 2 files
然后
find . -depth -iname '*foo*' -execdir rename -- 's/Foo/Bar/;s/foo/bar/' {} +
结果是
$ tree
.
└── dir
├── bar
│ └── baz
│ └── MainBar.c
└── Bar
├── baz
└── MainBar.c
5 directories, 2 files
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句