使用bash更改文件名

使用bash更改文件名,bash,Bash,数据结构如下所示,我想将“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

数据结构如下所示,我想将“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
...

您可以通过
while
循环和bash字符串替换来实现这一点:

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

如果显示良好,请删除回声。

您可以使用
while
循环和bash字符串替换来执行此操作:

find PATH -name "lane-7*" | while read -r file ; do
  echo mv $file ${file/lane-7/lane-8}
done
如果回声显示良好,请移除回声。

使用时,它是为此而设计的:

find PATH -name "lane-7*" | xargs rename "lane-7" "lane-5"
您可能会使用的perl版本(默认情况下,Debian会安装它)。在这种情况下,只需使用perl表达式即可:

find PATH -name "lane-7*" | xargs rename "s/^lane-7/lane-5/"
使用,它是为了:

find PATH -name "lane-7*" | xargs rename "lane-7" "lane-5"
您可能会使用的perl版本(默认情况下,Debian会安装它)。在这种情况下,只需使用perl表达式即可:

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

查找
rename
prename
命令(而不是
rename()
函数)。如果它存在于您的系统中,请使用它。如果没有,找到它;这会更简单。(问题是反引号命令在
find
启动之前执行!)它是如何失败的?如果删除尾随的
|sh
,应该可以看到该命令看起来是否正确,或者有什么问题。下面是一些很好的答案。只是一些提示。您不能将shell命令通过管道传输到sh。例如,您可以将它们写入临时文件并执行。使用find和xargs时,请使用find-print0和xargs-0。然后,它还可以处理由空格组成的文件名。否则可能会造成很多麻烦。请查找
rename
prename
命令(而不是
rename()
函数)。如果它存在于您的系统中,请使用它。如果没有,找到它;这会更简单。(问题是反引号命令在
find
启动之前执行!)它是如何失败的?如果删除尾随的
|sh
,应该可以看到该命令看起来是否正确,或者有什么问题。下面是一些很好的答案。只是一些提示。您不能将shell命令通过管道传输到sh。例如,您可以将它们写入临时文件并执行。使用find和xargs时,请使用find-print0和xargs-0。然后,它还可以处理由空格组成的文件名。否则你可能会搞砸很多。