Rename all files in a folder with a prefix in a single command

Rename all the files within a folder with prefix "Unix_"

Suppose a folder has two files

a.txt
b.pdf

then they both should be renamed from a single command to

Unix_a.txt
Unix_b.pdf
215328 次浏览

试试 rename命令 放在文件夹里:

rename 's/^/Unix_/' *

Rename (教育局局长的命令)的参数指示用 Unix _替换正则表达式 ^。插入符号(^)是一个特殊字符,表示 起跑线

如果您的文件名包含 没有空白并且您没有任何子目录,您可以使用一个简单的 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

On BSD systems, there is no -printf option, unfortunately. But GNU findutils should be installable (on e.g. Mac OS X with brew install findutils).

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

我想这正是你想要的:

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

是的,它是简单而优雅和强大的,也是一行。 你可以从我这里得到更详细的介绍: 重命名文件和目录(添加前缀)

也适用于带有空格的项,并忽略目录

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

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

通过 OS X Yosemite,苹果已经将批量重命名功能直接集成到 Finder 中。详细信息是可用的 给你。我也复制了下面的步骤,

重命名多个项目

  1. 选择这些项目,然后单击其中之一。

  2. In the shortcut menu, select Rename Items.

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

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

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

    • 格式: 为文件选择一种名称格式,然后选择将索引、计数器或日期放在名称之前或之后。在“自定义格式”字段中输入一个名称,然后输入要从头开始的数字。

  4. 单击“重命名”。

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

使用 Rnm(您需要安装它) :

rnm -ns 'Unix_/fn/' *

或者

rnm -rs '/^/Unix_/' *

附注: 我是这个工具的作者。

您可以只使用 -i而不是 -I {}

ls | xargs -i mv {} unix_{}

这也很完美。

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

使用 awk:

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

情况:

/user/ssl/里面有 certificate.key certificate.crt

我们想把以 certificate开头的任何东西重命名为 certificate_OLD

我们现在位于 /user内部

First, you do a dry run with -n:

rename -n "s/certificate/certificate_old/" ./ssl/*

结果是:

Rename (./ssl/證 icate.crt,./ssl/certificate _ OLD. crt) Rename (./ssl/證 icate.key,./ssl/certificate _ OLD. key)

Your files will be unchanged this is just a test run.

解决方案:

当你对测试结果感到满意的时候,真正地运行它:

rename "s/certificate/certificate_OLD/" ./ssl/*

意思:

‘ rename“ s/SOMETHING/SOMEting _ ELSE”PATH/FILES

提示:

如果你已经在这条路上了,像这样跑:

rename "s/certificate/certificate_OLD/" *

Or if you want to do this in any sub-directory starting with ss do:

rename -n "s/certificat/certificate_old/" ./ss*/*

你也可以这样做:

rename -n "s/certi*/certificate_old/" ./ss*/*

它重命名以 ss开头的任何子目录中以 certi开头的任何内容。

天空是极限。

Play around with regex and ALWAYS test this BEFORE with -n.

小心,这甚至会重命名文件夹的名字。 更好的 cd进入目录并在那里执行。 使用风险自负。

find -execdir rename

这将使用仅影响基名的正则表达式重命名文件和目录。

因此,对于一个前缀,你可以这样做:

PATH=/usr/bin find . -depth -execdir rename 's/^/Unix_/' '{}' \;

或仅影响文件:

PATH=/usr/bin find . -type f -execdir rename 's/^/Unix_/' '{}' \;

在仅对基名执行之前,先将 -execdir cd放入目录。

我已经在 在 Linux 中查找多个文件并重命名它们上详细解释过了