重命名前缀为"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中。详细信息请点击此处。我也复制了下面的步骤,
重命名多个项目
-
选择项目,然后控制单击其中一个项目。
-
在快捷菜单中,选择"重命名项目"。
-
在"重命名文件夹项目"下方的弹出菜单中,选择替换名称中的文本、在名称中添加文本或更改名称格式。
-
替换文本:在"查找"字段中输入要删除的文本,然后在"替换为"字段中键入要添加的文本。
-
添加文本:在字段中输入要添加的文本,然后选择在当前名称之前或之后添加文本。
-
格式:选择文件的名称格式,然后选择将索引、计数器或日期放在名称之前或之后。在"自定义格式"字段中输入名称,然后输入要以其开头的数字。
-
-
单击"重命名"。
如果文件中有一个通用模式,则可以使用"替换文本",否则"添加文本"也可以。
您可以只使用-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 中查找多个文件并重命名它们