使用单个unix命令中的前缀重命名文件夹中的所有文件

vas*_*thi 75 unix linux rename

重命名文件夹中所有文件的前缀为"Unix_",即假设一个文件夹有两个文件a.txt和b.pdf,那么它们都应该从一个命令重命名为Unix_a.txt和Unix_b.pdf

mik*_*iku 94

如果您的文件名不包含空格,并且您没有任何子目录,则可以使用简单的for循环:

$ for FILENAME in *; do mv $FILENAME Unix_$FILENAME; done 
Run Code Online (Sandbox Code Playgroud)

否则使用方便的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
Run Code Online (Sandbox Code Playgroud)

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

$ gfind . -type f -name '*' -printf "mv \"%h/%f\" \"%h/Unix_%f\"\n" | sh
Run Code Online (Sandbox Code Playgroud)

  • 如果您按照应有的方式引用变量,则 `for FILENAME in *; 执行 mv "$FILENAME" "Unix_$FILENAME"; 无论文件名中包含什么字符,done` 都能正常工作。它也可以移动目录、套接字、符号链接和其他文件类型;我认为这并不重要。 (2认同)

pav*_*ium 70

尝试使用文件的文件夹中rename命令:

rename 's/^/Unix_/' *
Run Code Online (Sandbox Code Playgroud)

重命名的参数(sed s命令)表示用Unix_替换正则表达式^.插入符号(^)是一个特殊字符,表示该行的开头.

  • 你能解释一下`/ s /.../'的意思吗? (7认同)
  • 替换前缀的示例:`rename 's/^start_/run_' *` (2认同)
  • 需要在 Linux 中安装 ```rename``` 包 (2认同)

Zhe*_*sin 26

我认为这正是你在寻找的东西:

ls | xargs -I {} mv {} Unix_{}
Run Code Online (Sandbox Code Playgroud)

是的,它简单,优雅,功能强大,而且还有同样的线索.您可以在页面上从我这里获得更详细的介绍:重命名文件和目录(添加前缀)

  • 当心处理 `ls` 的输出——如果文件名中有空格或其他奇怪的字符,它可能会导致问题。 (3认同)

Tej*_*s C 14

我最近遇到了同样的情况,发现了一个更简单的内置解决方案.我在这里分享它,以便它可以帮助寻找解决方案的其他人.

借助OS X Yosemite,Apple已将批量重命名功能直接集成到Finder中.详情请见此处.我也复制了以下步骤,

重命名多个项目

  1. 选择项目,然后按住Control键并单击其中一个.

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

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

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

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

    • 格式:选择文件的名称格式,然后选择在名称之前或之后放置索引,计数器或日期.在"自定义格式"字段中输入名称,然后输入要开始的数字.

  4. 单击"重命名".

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

  • 很棒 - 为我节省了很多时间! (2认同)

小智 6

您可以使用-i代替-I {}

ls | xargs -i mv {} unix_{}
Run Code Online (Sandbox Code Playgroud)

这也完美地工作。

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

使用awk:

ls -lrt | grep '^-' | awk '{print "mv "$9" unix_"$9""}' | sh
Run Code Online (Sandbox Code Playgroud)