有时,我想知道字形的名称。例如,如果我看到?
,我可能想知道它是连字符-
、短划线–
、长破折号—
还是减号?
。有没有办法可以将其复制粘贴到终端中以查看它是什么?
我不确定我的系统是否知道这些字形的通用名称,但肯定有一些(部分)信息可用,例如在/usr/share/X11/locale/en_US.UTF-8/Compose
. 例如,
<Multi_key> <exclam> <question> : "?" U203D # INTERROBANG
Run Code Online (Sandbox Code Playgroud)
另一个示例字形:.
我有一堆文件如下:
04602635_b0294.DAT20120807164534
04602637_b0297.DAT20120807164713
04602638_b0296.DAT20120807164637
04602639_b0299.DAT20120807164819
04602640_b0298.DAT20120807164748
04602641_b0300.DAT20120807164849
04602650_b0301.DAT20120807164921
04602652_b0302.DAT20120807164956
Run Code Online (Sandbox Code Playgroud)
我需要重命名它们以排除前缀。它需要看起来像这样..
b0294.DAT20120807164534
b0297.DAT20120807164713
b0296.DAT20120807164637
b0299.DAT20120807164819
b0298.DAT20120807164748
b0300.DAT20120807164849
b0301.DAT20120807164921
b0302.DAT20120807164956
Run Code Online (Sandbox Code Playgroud)
编辑
我忘了补充说我使用的是 Solaris。
我并不完全清楚,但是mv
and rename
(from util-linux-ng 2.17.2
as /usr/bin/rename
)之间有什么区别?除了rename
接受正则表达式之外,是否还有其他优势mv
?我相信rename
也可以一次处理多个文件重命名,mv
而不会这样做。
我无法在他们的man
页面中找到明确的指示,是什么让他们与众不同,或者通过我自己的一些调查。
我有一个名为的文件35554842200284685106000166550020003504201637715423.xml
,我只需将其重命名为42200284685106000166550020003504201637715423.xml
(删除最后 48 个字符之前的所有内容)。这个简单的正则表达式 ( .{48}$
) 可以提取最后 48 个字符,但我无法rename
在 Bash 中使用它。
如何使用rename
此正则表达式将其重命名为仅最后 48 个字符?
编辑:
输出 rename --help
[root@ip-000-00-0-000 tmp]# rename --help
Usage:
rename [options] <expression> <replacement> <file>...
Rename files.
Options:
-v, --verbose explain what is being done
-s, --symlink act on the target of symlinks
-n, --no-act do not make any changes
-h, --help display this help and exit
-V, --version output version information and exit
For more details see rename(1). …
Run Code Online (Sandbox Code Playgroud) 这真是一团糟。当我们期望 Perl 使用s///
类似 sed 的语法重命名时,当有大量不同的 实现rename
,并且大多数情况下是 Perl 的不同版本rename.ul
(二进制)时,我如何知道使用哪个命令?
在 CentOS 上,rename 命令使用两个简单的字符串,from
以及to
.
rename from to file...
Run Code Online (Sandbox Code Playgroud)
而在 Debian/Ubuntu 上,它使用 perl 风格的正则表达式。
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
Run Code Online (Sandbox Code Playgroud)
为什么此实用程序因分布而异?是否有关于哪些发行版发布或默认使用该实用程序的哪些版本的参考?
我有一个很大的音乐文件目录,其标题遵循以下格式:
Title_stringOfNumbers - Artist.mp3
Run Code Online (Sandbox Code Playgroud)
我的目标是删除下划线和数字,并将艺术家的名字与标题交换。
例如,原始文件名是:
whats up_7979841261 - randomArtist.mp3
Run Code Online (Sandbox Code Playgroud)
我想要的文件名:
randomArtist - whats up.mp3
Run Code Online (Sandbox Code Playgroud)
标题可以包含特殊字符('
、!
、.
、_
、(
、)
、/
,\
甚至日语字符)和数字,但下划线字符和数字在文件名的第一部分中永远不会彼此相邻(因此不存在multiple word title_2_6878492178471289 - artist.mp3
类似文件)。
到目前为止,我尝试使用rename
终端中的命令删除下划线,但我设法遇到了障碍,因为这一行没有做任何事情,而且我不熟悉使用它。
rename 'y/_//' *
Run Code Online (Sandbox Code Playgroud)
这一切都使用 POP!_OS 21.10,所以任何适用于 Ubuntu 的东西也应该适用于我的系统。我使用了 Perl 脚本rename
(随 一起安装sudo apt install rename
)。但是,我发现所有三个变体(rename
、prename
、file-rename
)都安装在我的系统上。
我有数百个目录,有些嵌套在其他目录中,有数万个文件。文件需要删除日期/时间戳。
一个示例文件名是Letter to Client 27May2016~20160531-162719.pdf
,我希望它恢复原状Letter to Client 27May2016.pdf
另一个示例文件名是ABCDEF~20160531-162719
,我希望它恢复为ABCDEF
. 请注意,与上面的示例不同,此文件没有扩展名。
我需要一个可以在受影响文件夹的根目录下运行的命令,该命令将递归遍历并查找/修复文件名。
(我使用 Syncthing 来同步文件,并通过将它们从.stversions
目录复制回原来的位置来恢复已删除的文件,但发现 Syncthing 附加了该日期/时间戳......)
我有一个文件夹,其中包含许多 .mkv
我想重命名的文件,而无需手动执行此操作。
模式是这样的:
...
[XVC]_Control_-_10_-_Doctors_[SCB055Y].mkv
[XVC]_Control_-_11_-_Engineers_[50OPZ00].mkv
...
Run Code Online (Sandbox Code Playgroud)
我希望结果是:
...
Control-10-Doctors.mkv
Control-11-Engineers.mkv
...
Run Code Online (Sandbox Code Playgroud)
我尝试过使用并通过和find
进行管道传输,但我似乎无法让它工作。sed
tr
这是我到目前为止所尝试过的:
find . -iname "*.mkv" -exec sed -e 's/\[[^][]*\]//g' {} \;
find . -type f "*mkv" | sed 's/\[[^][]*\]//g' | tr -d '_'
find . "*.mkv" -type f -print0 | xargs -0 sed -i '' -e 's/\[[^][]*\]//g' | tr -d '_'
find . -iname "*.mkv" -exec rename 's/\[[^][]*\]//g' .mkv '{}' \;
find . -iname "*.mkv" -exec rename -n 's/\[[^][]*\]//g' {} ";" …
Run Code Online (Sandbox Code Playgroud) 我有数百万个文件以“已损坏”的名称保存。扩展名已保存为_pdf
.
我想要的是递归地编辑所有这些扩展以按预期使用点。
find . -name '*_pdf' -type f -exec bash -c 'mv -- "$1" "${1//_/.}"' -- {} \;
Run Code Online (Sandbox Code Playgroud)
我已经尝试过使用这个 bash 脚本,但它替换了所有以 '.' 建立的 '_',我只想要最后一个 _ 并且如果使用通用扩展名(pdf、jpg、jpeg)。