重命名文件夹中所有文件的前缀 "Unix_"
假设一个文件夹有两个文件
a.txt
b.pdf
然后将它们都从一个命令重命名为
Unix_a.txt
Unix_b.pdf
重命名文件夹中所有文件的前缀 "Unix_"
假设一个文件夹有两个文件
a.txt
b.pdf
然后将它们都从一个命令重命名为
Unix_a.txt
Unix_b.pdf
Answers:
如果您的文件名不包含空格,并且您没有任何子目录,则可以使用一个简单的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
-printf
不幸的是,在BSD系统上,没有选择。但是GNU findutils应该是可安装的(例如,在带有的Mac OS X上brew install findutils
)。
$ gfind . -type f -name '*' -printf "mv \"%h/%f\" \"%h/Unix_%f\"\n" | sh
find
。
for f in *; do [[ -f ${f} ]] && mv ...; done
只捕获文件(不包含子目录,链接等)...
for FILENAME in *; do mv "$FILENAME" "Unix_$FILENAME"; done
无论文件名中包含什么字符,都可以正常工作。它也可以移动目录,套接字,符号链接和其他文件类型。我想那没关系。
.
在我所有文件之前添加了一个
's/^/.../'
意思吗?
's/^/.../'
是重命名命令
rename 's/^start_/run_' *
最近,我遇到了同样的情况,发现了一个更简单的内置解决方案。我在这里分享它,以帮助其他人寻找解决方案。
借助OS X Yosemite,Apple已将批量重命名功能直接集成到Finder中。详细信息可在此处获得。我也复制了以下步骤,
重命名多个项目
选择项目,然后按住Control并单击其中一项。
在快捷菜单中,选择“重命名项目”。
在“重命名文件夹项目”下面的弹出菜单中,选择替换名称中的文本,向名称中添加文本,或更改名称格式。
替换文本:在“查找”字段中输入要删除的文本,然后在“替换为”字段中输入要添加的文本。
添加文本:在字段中输入要添加的文本,然后选择在当前名称之前或之后添加文本。
格式:选择文件的名称格式,然后选择将索引,计数器或日期放在名称之前或之后。在“自定义格式”字段中输入一个名称,然后输入您要以其开头的数字。
单击重命名。
如果文件中具有通用模式,则可以使用“替换文本”,否则“添加文本”也可以完成此工作。
您可以使用-i
代替-I {}
ls | xargs -i mv {} unix_{}
这也完美地工作。
ls
-列出目录中的所有文件xargs
-由于该-i
选项,逐行接受所有文件{}
是所有文件的占位符,如果xargs
获取两个以上的参数作为输入,则为必需使用awk:
ls -lrt | grep '^-' | awk '{print "mv "$9" unix_"$9""}' | sh
-i
已弃用,现在只是-I
情况:
我们有certificate.key
certificate.crt
里面/user/ssl/
我们想重命名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/*
这是什么意思:
`rename“ s / SOMETHING / SOMETING_ELSE”路径/文件
小费:
如果您已经在路径上,请按以下方式运行它:
rename "s/certificate/certificate_OLD/" *
或者,如果您想在以do开头的任何子目录中执行此ss
操作:
rename -n "s/certificat/certificate_old/" ./ss*/*
您也可以这样做:
rename -n "s/certi*/certificate_old/" ./ss*/*
它将重命名以开头certi
的任何子目录中的任何内容ss
。
天空才是极限。
使用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中重命名它们