2011-06-13 77 views
51

重命名以“Unix_”为前缀的文件夹中的所有文件,即假设文件夹中有两个文件a.txt和b.pdf,则它们都应重命名从单个命令Unix_a.txt和Unix_b.pdf在单个unix命令中重命名文件夹中的所有文件并使用前缀

+1

检查此链接=> http://www.cyberciti.biz/tips/renaming-multiple-files-at-a-shell-prompt.html – 2011-06-13 11:02:26

+0

请点击此处查看:http://theunixshell.blogspot.com/2013/ 01/bulk-renaming-of-files-in-unix.html – Vijay 2013-01-10 06:34:11

回答

47

尝试rename命令的文件夹与所述文件

rename 's/^/Unix_/' * 

重命名(sed s command)的参数表示来替换正则表达式^Un ix_。脱字号(^)是一个特殊字符,意思是行的开头

+6

你能解释一下'/^/.../'的含义吗? – 2016-12-24 20:07:51

+0

@Matteo'的/^/.../'是[rename命令]的perl表达式参数(http://www.tecmint.com/rename-multiple-files-in-linux/) – RoyalleBlue 2017-01-19 15:38:12

71

如果你的文件名包含没有whitepace和你没有任何子目录,你可以用一个简单的循环for

$ for FILENAME in *; do mv $FILENAME Unix_$FILENAME; done 

否则使用便捷rename命令(这是一个Perl脚本) - 尽管它可能在每个Unix上都不可用(例如,OS X不包含rename)。

在debian-administration.org简短概述:

如果你的文件名包含空格它更容易使用find,在Linux下面应该工作:

$ find . -type f -name '*' -printf "echo mv '%h/%f' '%h/Unix_%f\n'" | sh 

在BSD系统上,不幸的是没有-printf选项。但GNU findutils应该可以安装(例如,在Mac OS X上使用brew install findutils)。

$ gfind . -type f -name '*' -printf "mv \"%h/%f\" \"%h/Unix_%f\"\n" | sh 
+0

Will如果任何文件包含空格,则不起作用 – Matteo 2013-08-04 07:23:46

+0

@Matteo:谢谢提示:更新了我的答案,并带有'find'的两个示例。 – miku 2013-08-04 10:02:26

+0

也会推荐'for f in *;做[[-f $ {f}]] && mv ...;完成'只捕获文件(没有子目录,链接等)... – twalberg 2013-09-04 20:52:34

21

我想这正是你却被寻找:

ls | xargs -I {} mv {} Unix_{} 

是的,这很简单,优雅和强大,以及courese的ALOS ONELINE-COMAND。 你可以从我这里得到更详细的介绍页面上:Rename Files and Directories (Add Prefix)

+0

这就是我要找的.... – Green 2017-01-05 10:02:04

0

也适用于项目与空间,而忽略目录

for f in *; do [[ -f "$f" ]] && mv "$f" "unix_$f"; done 
6

我最近所面对这个相同的情况下,发现了一个更简单的解决方案内置。我在这里分享它,以便它可以帮助其他人寻找解决方案。

借助OS X Yosemite,Apple已将批量重命名功能直接集成到Finder中。详细信息可在here。我抄在下面的步骤,以及,

重命名多个项目

  1. 选择的项目,然后按住Ctrl键单击其中之一。

  2. 在快捷菜单中,选择重命名项目。

  3. 在重命名文件夹项目下的弹出式菜单中,选择替换名称中的文本,将文本添加到名称或更改名称格式。

    • 替换文本:在“查找”字段中输入要删除的文本,然后在“替换为”字段中输入要添加的文本。

    • 添加文本:输入要在该字段中添加的文本,然后选择在当前名称之前或之后添加文本。

    • 格式:选择文件的名称格式,然后选择在名称前后放置索引,计数器或日期。在自定义格式字段中输入一个名称,然后输入您想要开始的号码。

  4. 单击重命名。

如果您的文件中有一个常见模式,那么您可以使用替换文本,否则添加文本也可以完成这项工作。

+0

优秀 - 为我节省了很多时间! – user3000868 2016-07-25 22:51:02

0

随着rnm(你需要安装它):

rnm -ns 'Unix_/fn/' * 

或者

rnm -rs '/^/Unix_/' * 

P.S:我是这个工具的作者。

+1

您应该通读所有有关您的实用程序的答案,并添加您是其作者的免责声明。 – Mogsdad 2016-05-07 14:32:02

+0

@Mogsdad:我不认为它是必要的信息。如果有人想找到作者,这很容易。 – Jahid 2016-05-09 13:03:08

3

你可以只使用-i代替-I {}

ls | xargs -i mv {} unix_{} 

这也完美的作品。

  • ls - 列出了目录
  • xargs所有文件 - 接受由行中的所有文件系由于-i选项
  • {}是所有文件的占位符,必要的,如果xargs获得两个以上的参数作为输入

用awk:

ls -lrt | grep '^-' | awk '{print "mv "$9" unix_"$9""}' | sh 
+0

'-i'已被弃用,现在只是'-I' – JamPow 2017-05-04 12:41:43

+0

它帮助我在Debian 8.Thaks – MinMaxUz 2017-11-30 16:38:53