重命名文件和目录(添加前缀)

Raf*_*ael 119 linux shell perl

我想在所有文件夹和目录上添加前缀.

例:

我有

Hi.jpg
1.txt
folder/
this.file_is.here.png
another_folder.ok/
Run Code Online (Sandbox Code Playgroud)

我想添加前缀"PRE_"

PRE_Hi.jpg
PRE_1.txt
PRE_folder/
PRE_this.file_is.here.png
PRE_another_folder.ok/
Run Code Online (Sandbox Code Playgroud)

问候,

Can*_*ice 194

感谢Peter van der Heijden,这里有一个适用于带有空格的文件名:

for f in * ; do mv -- "$f" "PRE_$f" ; done
Run Code Online (Sandbox Code Playgroud)

(" - "是成功使用以破折号开头的文件,否则其名称将被解释为mv命令的开关)

  • 如果将`ls`命令更改为`*`并将参数放在`mv`的参数周围,它将适用于包含空格的文件. (10认同)
  • 谢了哥们.这里的实习生正在松开他的手指帽,重命名所有67个文件.干杯. (2认同)
  • 它应该是“mv --”而不仅仅是“mv”,以防止以破折号开头的文件,否则会被解释为命令开关。我将进行编辑以纠正此问题。 (2认同)

tch*_*ist 76

这种方式使用重命名脚本:

$ rename 's/^/PRE_/' *
Run Code Online (Sandbox Code Playgroud)

文件名中的元字符或空格没有问题.

  • 有些系统有一个名为"rename"的util-linux实用程序,它的工作方式不同(在Ubuntu上称为"rename.ul"). (3认同)

Zhe*_*sin 57

要为文件(目录)添加前缀或后缀,可以使用xargs的简单而强大的方法:

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

ls | xargs -I {} mv {} {}_SUF
Run Code Online (Sandbox Code Playgroud)

它使用xargs的参数替换选项:-I.您可以从手册页获得更多详细信息.

  • PS:如果你只想**重命名当前目录的部分文件**(目录),只需在xargs之前过滤它,例如:`ls*.old | xargs -I {} mv {} PRE _ {}` (2认同)

Cyc*_*ode 29

这可以通过一个简单的find命令来完成:

find * -maxdepth 0 -exec mv {} PRE_{} \;
Run Code Online (Sandbox Code Playgroud)

上面的命令将为当前目录中的所有文件和文件夹添加前缀PRE_.


kur*_*umi 7

如果你有Ruby(1.9+)

ruby -e 'Dir["*"].each{|x| File.rename(x,"PRE_"+x) }'
Run Code Online (Sandbox Code Playgroud)


tad*_*dmc 7

与Perl:

perl -e 'rename $_, "PRE_$_" for <*>'
Run Code Online (Sandbox Code Playgroud)


koy*_*yae 7

要使用util-linux rename(而不是prenameDebian和某些其他系统的perl变体)为当前目录中的所有文件和文件夹添加前缀,您可以执行以下操作:

rename '' <prefix> *
Run Code Online (Sandbox Code Playgroud)

这将找到第一次出现的空字符串(立即找到),然后用您的前缀替换该出现,然后将文件名的其余部分粘贴到该字符串的末尾.完成.

对于后缀,您需要使用perl版本使用find.