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



重命名前缀为"Unix_" 的文件夹中的所有文件

假设一个文件夹有两个文件

a.txt
b.pdf

那么它们都应该从单个命令重命名为

Unix_a.txt
Unix_b.pdf

如果文件名包含无空白并且没有任何子目录,则可以使用简单的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_%fn'" | sh

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

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

在包含文件:的文件夹中尝试rename命令

rename 's/^/Unix_/' *

rename(sed s命令)的参数表示用Unix_替换regex^。插入符号(^)是一个特殊字符,表示行的开头

我想这正是你想要的:

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

是的,它既简单又优雅有力,而且是一条直线。您可以在页面上从我那里获得更详细的介绍:重命名文件和目录(添加前缀)

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

通过OS X Yosemite,苹果将批量重命名功能直接集成到Finder中。详细信息请点击此处。我也复制了下面的步骤,

重命名多个项目

  1. 选择项目,然后控制单击其中一个项目。

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

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

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

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

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

  4. 单击"重命名"。

如果文件中有一个通用模式,则可以使用"替换文本",否则"添加文本"也可以。

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

ls | xargs -i mv {} unix_{}

这也非常有效。

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

使用awk:

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

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

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

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

rnm -ns 'Unix_/fn/' *

rnm -rs '/^/Unix_/' *

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

情况:

我们在/user/ssl/ 中有certificate.key certificate.crt

我们想将以certificate开头的任何内容重命名为certificate_OLD

我们现在位于/user

首先,使用-n:进行试运行

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

哪个返回:

rename(./ssl/certificate.crt, ./ssl/certificate_OLD.crt) rename(./ssl/certificate.key, ./ssl/certificate_OLD.key)

您的文件将保持不变,这只是一次测试运行。

解决方案:

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

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

意思是:

`重命名"s/SOMETHING/SOMETING_ELSE"路径/FILES

提示:

如果你已经在路径上运行它像这样:

rename "s/certificate/certificate_OLD/" *

或者,如果您想在任何以ss开头的子目录中执行此操作,请执行:

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

你也可以做:

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

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

天空是极限。

玩regex,并在使用-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 中查找多个文件并重命名它们

相关内容

最新更新