Rename all the files within a folder with prefix "Unix_"
"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
试试 rename命令 放在文件夹里:
rename
rename 's/^/Unix_/' *
Rename (教育局局长的命令)的参数指示用 Unix _替换正则表达式 ^。插入符号(^)是一个特殊字符,表示 起跑线。
如果您的文件名包含 没有空白并且您没有任何子目录,您可以使用一个简单的 for循环:
for
$ for FILENAME in *; do mv $FILENAME Unix_$FILENAME; done
否则,使用方便的 rename命令(perl 脚本)——尽管它可能无法在每个 Unix 上开箱即用(例如,OS X 不附带 rename)。
Debian-administration.org 简介:
如果你的文件名中包含空格,那么使用 find会更容易,在 Linux 上应该可以做到以下几点:
find
$ 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).
-printf
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 中。详细信息是可用的 给你。我也复制了下面的步骤,
重命名多个项目
选择这些项目,然后单击其中之一。
In the shortcut menu, select Rename Items.
在“重命名文件夹项”下面的弹出菜单中,选择替换名称中的文本、向名称添加文本或更改名称格式。
替换文本: 在“查找”字段中输入要删除的文本,然后在“替换为”字段中输入要添加的文本。
添加文本: 在字段中输入要添加的文本,然后选择在当前名称之前或之后添加文本。
格式: 为文件选择一种名称格式,然后选择将索引、计数器或日期放在名称之前或之后。在“自定义格式”字段中输入一个名称,然后输入要从头开始的数字。
单击“重命名”。
如果您的文件中有一个公共模式,那么您可以使用替换文本,否则添加文本也可以完成这项工作。
使用 Rnm(您需要安装它) :
rnm -ns 'Unix_/fn/' *
或者
rnm -rs '/^/Unix_/' *
附注: 我是这个工具的作者。
您可以只使用 -i而不是 -I {}
-i
-I {}
ls | xargs -i mv {} unix_{}
这也很完美。
ls
xargs
{}
使用 awk:
ls -lrt | grep '^-' | awk '{print "mv "$9" unix_"$9""}' | sh
情况:
/user/ssl/里面有 certificate.key certificate.crt
/user/ssl/
certificate.key
certificate.crt
我们想把以 certificate开头的任何东西重命名为 certificate_OLD
certificate
certificate_OLD
我们现在位于 /user内部
/user
First, you do a dry run with -n:
-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:
ss
rename -n "s/certificat/certificate_old/" ./ss*/*
你也可以这样做:
rename -n "s/certi*/certificate_old/" ./ss*/*
它重命名以 ss开头的任何子目录中以 certi开头的任何内容。
certi
天空是极限。
Play around with regex and ALWAYS test this BEFORE with -n.
小心,这甚至会重命名文件夹的名字。 更好的 cd进入目录并在那里执行。 使用风险自负。
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放入目录。
-execdir
我已经在 在 Linux 中查找多个文件并重命名它们上详细解释过了