Answers:
我rename
一直都在用。这很简单,但是希望您了解基本的正则表达式:
rename "s/SEARCH/REPLACE/g" *
这将替换字符串SEARCH
用REPLACE
在每一个文件(也就是*
)。该/g
方法全球化的,如果你有一个SEARCH_SEARCH.jpg
,它会被重新命名REPLACE_REPLACE.jpg
。如果没有/g
,它将只进行一次替换,因此现在命名为REPLACE_SEARCH.jpg
。如果要不区分大小写,请添加/i
(在末尾/gi
或/ig
末尾)。
使用正则表达式,您可以做更多的事情。
请注意,这rename
是prename
(aka Perl rename
)命令,它支持完整的Perl正则表达式。还有一种rename
使用模式,但功能不那么强大。prename
曾经默认安装在Ubuntu(以及Perl)上,但是现在您可能需要执行以下操作:
sudo apt install rename
这里有一些例子:
添加:
rename 's/^/MyPrefix_/' *
document.pdf
重命名为 MyPrefix_document.pdf
移除:
您也可以删除不需要的字符串。假设您有20个名为like的MP3文件,CD RIP 01 Song.mp3
并且想要删除“ CD RIP”部分,并且想用一个命令从所有文件中删除它。
rename 's/^CD RIP //' *
CD RIP 01 Song.mp3
至 01 Song.mp3
请注意,中有多余的空格'^CD RIP '
,如果没有空格,则所有文件都会以空格作为文件的第一个字符。还要注意,这将在没有^
字符的情况下起作用,但会与CD RIP
文件名的任何部分匹配。该^
保证,如果他们是在文件的开头只删除字符。
添加:
rename 's/$/_MySuffix/' *
document.pdf
重命名为 document.pdf_MySuffix
变更:
rename 's/\.pdf$/.doc/' *
会Something.pdf
变成Something.doc
。(反斜杠的原因是,.
是regexp中的通配符,因此会.pdf
匹配,qPDF
而\.pdf
只会匹配完全匹配的字符串.pdf
。要特别注意的是,如果您不熟悉BASH,则必须在单引号中加上反斜杠!您不得省略引号!或使用双引号,否则bash会尝试将其翻译成bash \.
和 "\."
equals .
。(但使用双引号和反斜杠,例如对于换行符使用“ \ n”,但由于"\."
它不是有效的后退序列,因此转换成.
)
实际上,您甚至可以将字符串的各部分用引号引起来,而不是将其引起来:与BASH 's/Search/Replace/g'
相同。您只需要注意特殊字符(和空格)。s/'Search'/'Replace'/g
s/Search/Replace/g
我建议-n
您在不肯定时使用正确的正则表达式。它显示了将被重命名的内容,然后不做任何更改就退出了。例如:
rename -n s/'One'/'Two'/g *
如果您未将-n
标记放在此处,它将列出它会进行的所有更改。如果看起来不错,请按Up返回,然后删除-n
和按下Enter(或将其替换-v
为输出所做的所有更改)。
注意:rename
默认情况下,17.04以上的Ubuntu版本不附带,但是在存储库中仍然可用。使用sudo apt install rename
安装它
rename
,这就是我要附加的内容:for f in *; do mv -v "$f" "prependThis$f"; done
(?:\.[0-9]{3})$
在您的模式中使用,它将与被动组中的所有3位数字文件扩展名匹配。范例:rename s/^my_favorite_movie.avi(?:\.[0-9]{3})$/random_movie.avi/ *
。看看这个正则表达式备忘单。
在启动板上似乎有一个名为nautilus-renamer的项目。您可以通过make install
下载脚本并解压缩后运行来安装它。它似乎具有某些功能,或者如果您确实知道某些编程可能,则可以根据需要对其进行增强,因为它只是一个python脚本。
在命令行中,要重命名单个文件,该命令很简单
mv file1.txt file2.txt
如果要批量执行此操作,则可能需要通过脚本来执行。如果您提供更多详细信息,我或其他人可能会为您提供帮助。也就是说,将内容附加到文件的脚本可能如下所示:
#!/bin/bash
for file in *
do
# separate the file name from its extension
if [[ $file == *.* ]]; then
ext="${file##*.}"
fname="${file%.*}"
mv "$file" "${fname}_APPENDSTUFFHERE.$ext"
else
mv "$file" "${file}_APPENDSTUFFHERE"
fi
done
例如,如果您要遵循特定的重命名规则,则可能会根据您实际需要的方式对重命名的内容进行调整。(我个人会通过Perl脚本执行此操作,因为我的bash-foo并不怎么好,但这就是我。)
请注意,我将文件名和扩展名与先前提出的问题分开了。
如果您希望不使用命令行来执行此操作,与Windows中的操作类似,请使用向右箭头键而不是Tab键。就像Windows中的选项卡一样,这将选择下一个文件。
与如何一次重命名多个文件不是一个完全相同的问题吗?但我将建议与该答案中建议的程序相同的程序:qmv。
qmv是来自renameutils软件包的便捷工具。它使您可以使用自己喜欢的文本编辑器来重命名文件。结合vim的强大功能,您将拥有出色的重命名实用程序。
我通常像qmv -f do
在要重命名一堆文件的目录中那样调用它。或者,如果我想递归重命名qmv -R -f do
。
每当我需要重命名多个文件时,我总是依靠qmv(和vim)。
如果唯一合适的选择是手动重命名文件,那么一种很好的方法是使用vidir
(在moreutils
软件包中):
sudo add-apt-repository universe && sudo apt-get update && sudo apt-get install moreutils
DESCRIPTION
vidir allows editing of the contents of a directory in a text editor.
If no directory is specified, the current directory is edited.
When editing a directory, each item in the directory will appear on
its own numbered line. These numbers are how vidir keeps track of what
items are changed. Delete lines to remove files from the directory, or
edit filenames to rename files. You can also switch pairs of numbers
to swap filenames.
Note that if "-" is specified as the directory to edit, it reads a
list of filenames from stdin and displays those for editing.
Alternatively, a list of files can be specified on the command line.
当前工作目录的内容:
.
├── bar
├── baz
└── foo
运行vidir
,在包含要重命名文件名的行中重命名文件名;按CTRL+ O和CTRL+ X:
.
├── bar.bak
├── baz.old
└── foo.new
当前工作目录的内容:
.
├── bar
├── baz
└── foo
当前工作目录文件的内容:
$ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done
- bar:
This is bar
- baz:
This is baz
- foo:
This is foo
$
运行vidir
,在包含您要切换的文件名的行中切换数字;按CTRL+ O和CTRL+ X:
.
├── bar
├── baz
└── foo
$ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done
- bar:
This is foo
- baz:
This is bar
- foo:
This is baz
$
当前工作目录的内容:
.
├── bar
├── baz
└── foo
运行vidir
,删除包含您要删除的文件的行;按CTRL+ O和CTRL+ X:
.
└── baz