我必须对文件进行一些复杂的正则表达式,然后移动文件。 我在考虑xargs,因为它看起来很优雅。
find . -name "*.txt" -print0 | sed 's/[[complex-regex]]//g' | xargs -0 -I file mv file output-of-sed
我已经搜索了几个小时,但是让我难以理解的语法是如何将sed的输出作为上面mv命令的第二个参数。
我完全一无所知,但是被xargs的魔咒所迷住了,这甚至可能是我想要做的吗?
答案 0 :(得分:1)
当需要复杂的正则表达式来重命名或移动目录或文件时,rename是一种解决方法:
find . -name "*.txt" -print0 -exec rename -0 's@[[complex-regex]]@@' {} \;
有些其他具有相同名称的工具可能无法执行此操作,因此请小心。
util-linux
软件包中的重命名命令不会。
如果运行以下命令(GNU
)
$ file "$(readlink -f "$(type -p rename)")"
并且您得到的结果包含Perl script, ASCII text executable
而不包含ELF
,那么这似乎是正确的工具=)
如果没有,则将其设置为Debian
和Ubuntu
之类的派生类的默认设置(通常已经是这样):
$ sudo update-alternatives --set rename /path/to/rename
将/path/to/rename
替换为perl rename
可执行文件的路径。
如果您没有此命令,请搜索软件包管理器以安装它,或者do it manually(无部门...)
此工具最初由Perl的父亲Larry Wall编写。