Answers:
在终端中,cd
进入正确的目录,然后运行此目录。
rename 's/\:/-/g' *.png -vn
这将预览重命名。就应更换:
同-
。
如果看起来正确,请n
从最后删除,然后进行实际的重命名。
注意:Ubuntu 17.04以上的版本未随附rename
,但默认存储库中仍可用,因此请使用sudo apt install rename
来获取它
n
轻松删除它(或)。
rename 's/\:/-/g; s/%28/ /g; s/%29//g' ...
这是一个纯bash解决方案:
for i in *:*; do
mv "$i" "${i//:/_}"
done
该${var//pattern/replacement}
格式将取代所有出现的pattern
与replacement
在变量$var
。有关bash的字符串处理功能的更多信息,请参见此处。
如果要对多个字符执行此操作,则只需将它们放在字符类中即可。因此,举例来说,全部更换的;
,:
,=
,+
,%
,,
用下划线,你可以这样做:
$ ls
1foo:bar 2foo:bar:baz 3foo;bar 4foo=bar 5foo%bar 6foo,bar 7foo+bar
$ for i in *; do mv "$i" "${i//[:;=%,+]/_}"; done
$ ls
1foo_bar 2foo_bar_baz 3foo_bar 4foo_bar 5foo_bar 6foo_bar 7foo_bar
基本上,这个想法是[ ]
手段any of the characters listed
。因此,通过将要替换的所有字符放置在字符类中,可以一次处理所有这些字符。
对于您要求的特定字符,事情有些复杂,因为其中一些需要转义(我忽略了,/
因为* nix不允许在文件名中使用Windows,因此* nix不会问题):
$ ls
1foo<bar 2foo>bar 3foo:bar 4foo\bar 5foo|bar 6foo*bar 7foo?bar 8foo"bar 9foo'bar
$ for i in *; do mv "$i" "${i//[<>:\\|*\'\"?]/_}"; done
$ ls
1foo_bar 2foo_bar 3foo_bar 4foo_bar 5foo_bar 6foo_bar 7foo_bar 8foo_bar 9foo_bar
请注意,我对进行了转义\
,'
并在每个前面"
添加了\
一个。
我更喜欢GUI,但作为Nautilus扩展,即Nautilus Actions Extra:
sudo add-apt-repository ppa:nae-team/ppa
sudo apt-get update
sudo apt-get install nautilus-actions-extra
nautilus -q
(请参阅www.webupd8.org/2011/12/nautilus-actions-extra-pack-of-useful.html)
然后,当您选择要重命名的文件并从上下文菜单中单击“重命名”时,会提供许多用于重命名文件的选项。
该renameutils
软件包有一个名为的便捷程序qmv
,可提供交互式批重命名。您在目录或文件列表上运行它,它会生成一个包含文件名的临时文本文件,并启动您喜欢的编辑器。退出编辑器时,更改的所有文件名都会相应地重命名。qmv
将批量重命名问题变为文本编辑问题。
在这种情况下,您可以qmv -f do *:*
用来编辑所有包含冒号的文件的名称,然后:%s/:/_/g
在Vim中编辑命令(或在使用的任何编辑器中进行相应的搜索和替换)。
该-f do
选项将文本文件的格式设置为仅具有目标文件名,这使搜索和替换更为简单。默认格式在每行上都有文件名的两个副本,而您仅编辑第二个副本。如果您已删除或重新排序文件中的行,这使它可以执行正确的操作,但这并不总是最简单的。也有其他格式。
使用qmv
,您可以选择通过自己选择的命令(例如)通过管道传输生成的文件sed
,如果您不需要交互功能。
@echo off
echo.
echo. How many Characters Do You Want To Remove
echo.
echo. From The End Of The FileName ?
echo.
echo.
set /p variable=" > "
setlocal enabledelayedexpansion
for /f "delims=" %%a in (' dir /b /a-d *.mp3') do (
set oldName=%%a
Set newName=!oldName:~0,-%variable%!.mp3
Ren "!oldName!" "!newName!"
)
exit