rename.ul
你能建议一下在Ubuntu 22.04下如何使用吗?非常感谢 !
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.10.102.1-microsoft-standard-WSL2 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
/etc/update-motd.d/50-landscape-sysinfo: 17: cannot create /var/lib/landscape/landscape-sysinfo.cache: Permission denied
System information as of Thu Aug 11 14:43:22 CST 2022
System load: 0.0 Processes: 15
Usage of /: 15.8% of 250.98GB Users logged in: 0
Memory usage: 0% IPv4 address for eth0: 172.25.114.46
Swap usage: 0%
0 updates can be applied immediately.
This message is shown once a day. To disable it please create the
/home/user/.hushlogin file.
user@localhost:~$ rename.ul
rename.ul: command not found
user@localhost:~$ sudo apt-get install util-linux
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
util-linux is already the newest version (2.37.2-4ubuntu3).
util-linux set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
user@localhost:~$ rename
Command 'rename' not found, but can be installed with:
sudo apt install rename
user@localhost:~$ rename.ul
rename.ul: command not found
user@localhost:~$
答案1
rename.ul
rename
是从包中安装的版本util-linux
。如果它仍然存在,您将安装它apt install util-linux
。然而,由于这个提交的错误,它似乎已从上游 Debian 软件包版本 2.35.2-5 中删除util-linux:未安装 rename.ul 作为“重命名”命令的可能替代方案。
据我所知,该功能在rename
包(apt install rename
)中提供的命令中可用,如果您确实需要rename.ul
作为与此不同的命令rename
,则必须从其他来源安装它。
文档 ( man rename
) 中给出了使用示例。这是我的看法,它将替换abc
所有def
以 结尾的文件名.txt
:
rename abc def *.txt
另请参阅
答案2
正如我在另一个答案中评论的那样(一个相当老的问题,但尚未给出正确的答案),rename
来自 Perl 的 utils 的用法与之前的不同rename.ul
当然最终的实用程序相同:重命名一堆文件。但界面不一样。
Perl 的重命名(基本上)与正则表达式和一堆文件一起使用
./rename s/abc/def/ *.txt
例如。
虽然 util-linux 与旧模式、新模式和一堆文件一起使用
./rename.ul abc def *.txt
perl版本更强大。您可以使用正则表达式进行更精细的重命名。作为正则表达式的常规用户,我应该更喜欢它。但我不这样做,因为 util-linux 版本实际上覆盖了我 100% 的使用情况。并且与 readline 的选项卡配合良好(大多数时候,我想重命名文件名的开头),而 perl 版本则强制使用键盘更加详细并明确地输入更多内容。
它们都是非常古老的命令。所以这里没有新的和旧的(当然,其中一个比另一个新。我不知道是哪一个。但我已经认识他们很长时间了。也许十年甚至更久) )。
曾几何时,这个util-linux
是作为rename
命令安装的。而且你必须挖掘 perl 的那个。以 RedHat 为例,情况仍然如此。但在基于 debian 的系统上已经不再出现这种情况了,rename
默认情况下命令指向 perl 版本。
但是,直到 Ubuntu 20 为止,该util-linux
命令都可以作为命令使用rename.ul
。它已从 debian 中删除,然后从 Ubuntu 22 中删除。这激怒了不止一个人,并且仍然有人发布“错误票”以某种抗议(很清楚这不是真正的错误,最多)一个错误的决定)。
但是,在 Ubuntu 22 上,您只能使用 perl rename
,并且 util-linux 不可用,甚至无法使用其他名称(例如rename.ul
)。
对我来说,我使用一个非常简单的 python 脚本来完成这项工作
#!/usr/bin/python3
import sys
import os
if len(sys.argv)<4:
print("Usage rename.ul pattern newPattern file1 file2 file3 ...")
print("Renames all file1, file2, ... by replacing 'pattern' by 'newPattern' in their filenames")
sys.exit(1)
for fn in sys.argv[3:]:
os.rename(fn, fn.replace(sys.argv[1], sys.argv[2]))
当然,它没有选项rename.ul
(控制覆盖、空运行、如何处理符号链接等)。另外,我从来没有用特殊字符或类似的东西对它进行酷刑测试。但它确实做了我rename.ul
十年来一直在做的事情。如果您愿意,您可以使用它(带有所有“无保证”和此类免责声明。如果您因为该脚本而丢失文件,那是您的责任,而不是我的责任:D)