删除文件名的第一部分

删除文件名的第一部分

我有一个目录,里面全是 foo_num.txt 文件。我想将所有文件重命名为 num.txt(即删除“foo_”部分)。我可以用一行代码完成这个操作吗?

答案1

如果你不想在 Bash 中使用 for 循环,你可能想要使用rename程序:

rename "s/foo_//" *.txt

第一个参数是定义字符串替换规则的 Perl 表达式。在本例中:[s]ubstitute "foo_" with ""。

第二个参数过滤您想要重命名的文件。

答案2

由于你的第一部分被一个_我建议你

rename 's/.*?_//' *.txt

办法?不贪婪,因此只有第一次出现的_会被替换。

例子

$ ls -laog
total 4280
drwxrwxr-x  2 4329472 Aug 10 13:05 .
drwx------ 55   20480 Aug 10 12:54 ..
-rw-rw-r--  1       0 Aug 10 13:05 foo_1_1.txt
-rw-rw-r--  1       0 Aug 10 13:05 foo_2_2.txt
-rw-rw-r--  1       0 Aug 10 13:05 foo_3_3.txt

$ rename 's/.*?_//' *.txt

$ ls -laog
total 4280
drwxrwxr-x  2 4329472 Aug 10 13:06 .
drwx------ 55   20480 Aug 10 12:54 ..
-rw-rw-r--  1       0 Aug 10 13:05 1_1.txt
-rw-rw-r--  1       0 Aug 10 13:05 2_2.txt
-rw-rw-r--  1       0 Aug 10 13:05 3_3.txt

要替换所有出现的情况,请使用

rename 's/.*_//' *.txt

例子

$ ls -laog
total 4280
drwxrwxr-x  2 4329472 Aug 10 13:08 .
drwx------ 55   20480 Aug 10 12:54 ..
-rw-rw-r--  1       0 Aug 10 13:08 foo_1_1.txt
-rw-rw-r--  1       0 Aug 10 13:08 foo_2_2.txt
-rw-rw-r--  1       0 Aug 10 13:08 foo_3_3.txt

$ rename 's/.*_//' *.txt

$ ls -laog
total 4280
drwxrwxr-x  2 4329472 Aug 10 13:09 .
drwx------ 55   20480 Aug 10 12:54 ..
-rw-rw-r--  1       0 Aug 10 13:08 1.txt
-rw-rw-r--  1       0 Aug 10 13:08 2.txt
-rw-rw-r--  1       0 Aug 10 13:08 3.txt

相关内容