Bash 在Unix中为文件名添加前缀

Bash 在Unix中为文件名添加前缀,bash,unix,file-rename,Bash,Unix,File Rename,如何重命名其他目录中的文件? 例如,在目录/home/abc/xyz/folder下,我们有像abc.csv、xyz.csv、pqr.csv这样的文件,我们需要为这些文件添加前缀前缀 我尝试了ls*.csv | xargs-I{}mv{}PREFIX{}。它在当前目录下工作,即/home/abc/xyz/folder 如何从/home目录重命名这些文件?类似地,我尝试了ls/home/abc/xyz/folder/*.csv | xargs-I{}mv{}前缀{} — 不工作。有一个工具,名为r

如何重命名其他目录中的文件? 例如,在目录
/home/abc/xyz/folder
下,我们有像
abc.csv
xyz.csv
pqr.csv
这样的文件,我们需要为这些文件添加前缀
前缀

我尝试了
ls*.csv | xargs-I{}mv{}PREFIX{}
。它在当前目录下工作,即
/home/abc/xyz/folder


如何从
/home
目录重命名这些文件?类似地,我尝试了
ls/home/abc/xyz/folder/*.csv | xargs-I{}mv{}前缀{}
 — 不工作。

有一个工具,名为
rename
;)

您可以将它与find/xargs结合使用(我刚刚使用过一点)

或者您可以使用-exec,但在这种情况下,将为符合查找条件的每个文件启动1个重命名过程

find . -type f -exec rename 's@(.*)/([^/]+)@$1/prefix_$2@' "{}" \;
注意:在我的系统上运行
find | xargs
需要
61ms
,但
find-exec
需要
1250ms
(与find
~52
匹配的文件)

注意:我一直教导只有一个重命名实用程序,它甚至具有替代支持…我使用了
perl
包中的一个,也称为
prename

尝试以下方法:

ls *.csv| awk '{print "mv /home/abc/xyz/folder/" $0 " /home/abc/xyz/folder/PREFIX_"$0}'|sh

最好使用
find
-exec
功能,而不是
xargs
@AndreaCorbellini:但是,在这种情况下,会为每个匹配的文件启动单独的进程,我通常不希望这样,但我添加了一个-exec变量;)@佐尔坦·纳吉:这样行吗?如果我运行上述代码只重命名一个目录中的文件,因为我在这里找不到任何指定的路径,请按照我在问题中所说的,在/home目录下执行命令重命名/home/abc/xyz/folder目录下的所有.csv文件有多个名为
重命名
的工具,巴斯蒂安一世更新了答案;我使用的是
prename
;您可能希望使用以下选项检查当前默认选项:
updatealternations--query rename
find . -type f -exec rename 's@(.*)/([^/]+)@$1/prefix_$2@' "{}" \;
ls *.csv| awk '{print "mv /home/abc/xyz/folder/" $0 " /home/abc/xyz/folder/PREFIX_"$0}'|sh