将xargs传递给sed和mv命令

时间:2019-12-13 00:30:22

标签: shell xargs

我必须对文件进行一些复杂的正则表达式,然后移动文件。 我在考虑xargs,因为它看起来很优雅。

find . -name "*.txt" -print0 | sed 's/[[complex-regex]]//g' | xargs -0 -I file mv file output-of-sed

我已经搜索了几个小时,但是让我难以理解的语法是如何将sed的输出作为上面mv命令的第二个参数。

我完全一无所知,但是被xargs的魔咒所迷住了,这甚至可能是我想要做的吗?

1 个答案:

答案 0 :(得分:1)

当需要复杂的正则表达式来重命名或移动目录或文件时,是一种解决方法:

find . -name "*.txt" -print0 -exec rename -0 's@[[complex-regex]]@@' {} \;

warning 有些其他具有相同名称的工具可能无法执行此操作,因此请小心。

util-linux软件包中的重命名命令不会。

如果运行以下命令(GNU

$ file "$(readlink -f "$(type -p rename)")"

并且您得到的结果包含Perl script, ASCII text executable而不包含ELF,那么这似乎是正确的工具=)

如果没有,则将其设置为DebianUbuntu之类的派生类的默认设置(通常已经是这样):

$ sudo update-alternatives --set rename /path/to/rename

/path/to/rename替换为perl rename可执行文件的路径。


如果您没有此命令,请搜索软件包管理器以安装它,或者do it manually(无部门...)


此工具最初由Perl的父亲Larry Wall编写。