【发布时间】:2019-12-13 08:38:42
【问题描述】:
我必须对文件执行一些复杂的正则表达式,然后移动文件。 我正在考虑 xargs,因为它看起来非常适合这项工作。
find . -name "*.txt" -print0 | sed 's/[[complex-regex]]//g' | xargs -0 -I file mv file output-of-sed
我已经用谷歌搜索了好几个小时,但我一直不明白的语法是如何将 sed 的输出作为上面 mv 命令的第二个参数。
我完全一无所知,但被 xargs 的魔力迷住了,这可能是我想要做的吗?
【问题讨论】:
-
sed命令的输出是什么样的?每行是否包含原始名称和“修改后的”名称(名称由空格分隔,旧名称在新名称之前)?是否总是保证名称不同?是否有任何名称中包含空格、换行符或其他令人讨厌的字符?假设您每行生成“旧新”,并且文件名中没有空格,您可能可以使用xargs每行工作。即使这样也不能保证。顺便说一句,您的sed命令可能应该知道空分隔符。 -
嗨,乔纳森,sed 命令的输出与输入文件非常不同,例如它删除了多个空格并用单个下划线替换它们
-
好吧,但是……好吧,多个空格位让生活变得可怕。无论如何,如果你要手动移动文件,你会使用
mv old-name new-name。如果您从未将old-name传递给xargs,那么xargs执行的mv命令如何知道旧名称是什么?那么您使用空格的事实意味着您需要告诉sed使用以空结尾的行,并且您必须打印旧名称,然后将其弄乱并打印新行,并且然后告诉xargs使用成对的连续名称。但是你得到的答案几乎就是你所需要的。