相关疑难解决方法(0)

如何找到特定字形的通用名称?

有时,我想知道字形的名称。例如,如果我看到?,我可能想知道它是连字符-、短划线、长破折号还是减号?。有没有办法可以将其复制粘贴到终端中以查看它是什么?

我不确定我的系统是否知道这些字形的通用名称,但肯定有一些(部分)信息可用,例如在/usr/share/X11/locale/en_US.UTF-8/Compose. 例如,

<Multi_key> <exclam> <question>         : "?"   U203D # INTERROBANG
Run Code Online (Sandbox Code Playgroud)

另一个示例字形:.

terminal special-characters

21
推荐指数
3
解决办法
1619
查看次数

从文件名中删除前缀

我有一堆文件如下:

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。

solaris filenames rename

15
推荐指数
2
解决办法
1万
查看次数

“重命名”和“mv”有什么区别?

我并不完全清楚,但是mvand rename(from util-linux-ng 2.17.2as /usr/bin/rename)之间有什么区别?除了rename接受正则表达式之外,是否还有其他优势mv?我相信rename也可以一次处理多个文件重命名,mv而不会这样做。

我无法在他们的man页面中找到明确的指示,是什么让他们与众不同,或者通过我自己的一些调查。

rename mv

15
推荐指数
1
解决办法
1万
查看次数

使用正则表达式在 Bash 中重命名文件

我有一个名为的文件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)

bash rename

8
推荐指数
3
解决办法
2268
查看次数

重命名命令有哪些不同版本?如何使用 Perl 版本?

这真是一团糟。当我们期望 Perl 使用s///类似 sed 的语法重命名时,当有大量不同的 实现rename,并且大多数情况下是 Perl 的不同版本rename.ul(二进制)时,我如何知道使用哪个命令?

perl regular-expression rename

8
推荐指数
1
解决办法
2660
查看次数

为什么 Debian/Ubuntu 上的重命名实用程序与其他发行版(如 CentOS)上的重命名实用程序不同?

在 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)

为什么此实用程序因分布而异?是否有关于哪些发行版发布或默认使用该实用程序的哪些版本的参考?

debian centos utilities rename distributions

7
推荐指数
1
解决办法
3024
查看次数

简化复杂的音乐文件名

我有一个很大的音乐文件目录,其标题遵循以下格式:

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)。但是,我发现所有三个变体renameprenamefile-rename)都安装在我的系统上。

rename

7
推荐指数
2
解决办法
1017
查看次数

递归地从文件名中删除字符

我有数百个目录,有些嵌套在其他目录中,有数万个文件。文件需要删除日期/时间戳。

一个示例文件名是Letter to Client 27May2016~20160531-162719.pdf,我希望它恢复原状Letter to Client 27May2016.pdf

另一个示例文件名是ABCDEF~20160531-162719,我希望它恢复为ABCDEF. 请注意,与上面的示例不同,此文件没有扩展名。

我需要一个可以在受影响文件夹的根目录下运行的命令,该命令将递归遍历并查找/修复文件名。

(我使用 Syncthing 来同步文件,并通过将它们从.stversions目录复制回原来的位置来恢复已删除的文件,但发现 Syncthing 附加了该日期/时间戳......)

rename

5
推荐指数
1
解决办法
4443
查看次数

如何在 Linux 中批量重命名与某个模式匹配的所有文件?

我有一个文件夹,其中包含许多 .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进行管道传输,但我似乎无法让它工作。sedtr

这是我到目前为止所尝试过的:

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)

bash sed filenames regular-expression rename

5
推荐指数
1
解决办法
7529
查看次数

查找并用 '.' 替换最后一个字符 '_' 在文件名上递归

我有数百万个文件以“已损坏”的名称保存。扩展名已保存为_pdf.

我想要的是递归地编辑所有这些扩展以按预期使用点。

find . -name '*_pdf' -type f -exec bash -c 'mv -- "$1" "${1//_/.}"' -- {} \;
Run Code Online (Sandbox Code Playgroud)

我已经尝试过使用这个 bash 脚本,但它替换了所有以 '.' 建立的 '_',我只想要最后一个 _ 并且如果使用通用扩展名(pdf、jpg、jpeg)。

centos shell-script

4
推荐指数
2
解决办法
436
查看次数