1

数据结构如下,我想将“lane-7”更改为“lane-5”。我正在考虑这样的命令,但它不起作用。

    find PATH -name "lane-7*" | xargs -i echo mv {} `echo {}|sed 's/lane-7/lane-5/'` | sh

任何想法?谢谢

PATH/28/lane-7-22.fq
PATH/28/lane-7-21.fq
PATH/28/lane-7-18.fq
PATH/28/lane-7-24.fq
PATH/28/lane-7-23.fq
PATH/28/lane-7-19.fq
PATH/28/27/lane-7-22.fq
PATH/28/27/lane-7-21.fq
PATH/28/27/lane-7-18.fq
PATH/28/27/lane-7-24.fq
PATH/28/27/lane-7-23.fq
PATH/28/27/lane-7-19.fq
PATH/28/27/26/lane-7-22.fq
PATH/28/27/26/lane-7-21.fq
PATH/28/27/26/lane-7-18.fq
PATH/28/27/26/lane-7-24.fq
PATH/28/27/26/lane-7-23.fq
PATH/28/27/26/lane-7-19.fq
PATH/28/27/26/25/lane-7-22.fq
PATH/28/27/26/25/lane-7-21.fq
PATH/28/27/26/25/lane-7-18.fq
PATH/28/27/26/25/lane-7-24.fq
PATH/28/27/26/25/lane-7-23.fq
PATH/28/27/26/25/lane-7-19.fq
...
4

2 回答 2

2

您可以使用while循环和 bash 字符串替换来做到这一点:

find PATH -name "lane-7*" | while read -r file ; do
  echo mv $file ${file/lane-7/lane-8}
done

删除echo看起来不错的 if。

于 2012-04-06T16:28:28.530 回答
2

使用rename,它是为此而制作的:

find PATH -name "lane-7*" | xargs rename "lane-7" "lane-5"

您可能使用 perl 版本的rename代替(Debian 默认安装它)。在这种情况下,只需使用 perl 表达式:

find PATH -name "lane-7*" | xargs rename "s/^lane-7/lane-5/"
于 2012-04-06T16:31:31.820 回答