gpt4 book ai didi

python - 以相反的顺序批量重命名目录

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:26:30 25 4
gpt4 key购买 nike

我有一堆(超过 700 个)目录以下列方式命名

1 - *random*name*1*
2 - *random*name*2*
...
725 - *random*name*725*

前导数字 (1-725) 都是目录名称的一部分。

即:所有目录名称均以数字开头,后跟 [空格][破折号][空格],再后跟一些文本。

我想批量重命名它们,这样它们将被命名为:

1 - *random*name*725*
2 - *random*name*724*
...
725 - *random*name*1*

我只想“反转”目录名称的数字部分。本质上,我希望“1 - ”之后的文本跟在“725 - ”之后,“2 - ”之后的文本跟在“724 - ”之后,依此类推。

最简单的方法是什么?我在 Linux 上。

注意:*随机*名称*各不相同,仅供说明之用。

最佳答案

使用 perl 的一种方式。代码已注释。

script.pl的内容:

#!/usr/bin/env perl

use warnings;
use strict;
use File::Basename qw|basename|;

die qq{Usage: perl $0 <real|trial>\n} unless @ARGV == 1;

my $real = $ARGV[0] eq q|real| ? 1 : 0;

## Filter filenames from the directory that match criteria of OP.
my @files = grep { -d $_ && m/\A(\d+)\s-\s.*\1/ } map { basename $_ } <./*>;

## Get numbers in reverse mode to substitute them later in filenames .
my @nums = map { m/\A(\d+)/; $1 || 0 } reverse @files;

## Process all files, change the number of the file and rename it.
for my $file ( @files ) {
(my $new_file = $file) =~ s/\A(\d+)/shift @nums/e;

if ( $real ) {
rename $file, $new_file or warn qq|WARN: Couldn't rename "$file"\n|;
}
else {
printf qq|%s\n|, qq|rename "$file" "$new_file"|;
}
}

列出目录:

ls -1

输出如下:

1 - file1file
2 - fi2le
3 - fileeee3
4 - fou4r
5 - donttouch
6 - donttouch5either
script.pl

运行脚本:

perl script.pl

再次列出目录:

ls -1

输出如下:

1 - fou4r
2 - fileeee3
3 - fi2le
4 - file1file
5 - donttouch
6 - donttouch5either
script.pl

编辑:评论中有人建议让试运行先于真正的运行,所以我添加了一个参数 realtrial .对于第一个选项,它将进行真正的更改,而对于第二个选项,它将 print 输出真正的命令,但不运行它们。现在像这样运行脚本:

perl script.pl real

perl script.pl trial

关于python - 以相反的顺序批量重命名目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11561479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com