Script để dọn sạch tên thư mục


2

Tôi có rất nhiều thư mục cần được đổi tên dựa trên quy tắc cặp đôi. ví dụ về các thư mục:

-- Some.Folder.Name.Today.2009
-- Another.messed.Up.folder.1980
-- Third.messed.Up.folder.1980

Tôi muốn xem có ai có tập lệnh nhanh để đổi tên từng thư mục để xóa dấu chấm (.) Khỏi tên thư mục và đặt dấu ngoặc đơn quanh năm để nó trông như thế này không

-- Some Folder Name Today (2009)
-- Another messed Up folder (1980)
-- Third messed Up folder (1980)

Cảm ơn rất nhiều!


2
hệ thống điều hành của bạn là gì?
Matthieu Cartier

Rất tiếc, tôi đã quên đề cập đến việc tôi đang chạy Windows 7
McLovin

Câu trả lời:


1

Perl xử lý việc này tốt, một cái gì đó như thế này sẽ đủ:

use warnings;
use strict;
use File::Copy;

my $oldname;

opendir(my $d, ".") or die $!;
while(readdir $d) {
    if (-d $_ and $_ ne "." and $_ ne "..")
    {
        $oldname = $_;
        $_ =~ s/\./ /g;
        $_ =~ s/(\d{4})/($1)/g;
        move($oldname,$_);
    }
    }
closedir $d;

Chỉ được thử nghiệm ngắn gọn, hãy thoải mái chơi golf / sửa đổi nó! Nó không hoàn hảo bằng mọi cách. Hack nó cùng nhau một cách nhanh chóng;)

Lưu ý: Ở trạng thái hiện tại, nó phải được chạy trong thư mục với các tên thư mục được đọc sai.

C: \ Users \ John \ Desktop \ thư mục> dir
 Âm lượng trong ổ C không có nhãn.
 Số sê-ri khối là 8888-1666

 Thư mục của C: \ Users \ John \ Desktop \ thư mục

29/01/2011 07:14 PM.
29/01/2011 07:14 PM ..
29/01/2011 07:07 PM some.folder.name.2008
29/01/2011 07:07 PM some.folder.name.2009
29/01/2011 07:16 PM 282 ren.pl
               1 tệp 282 byte
               4 Dir (53) miễn phí 53.349.425.152 byte

C: \ Users \ John \ Desktop \ thư mục> ren.pl

C: \ Users \ John \ Desktop \ thư mục> dir
 Âm lượng trong ổ C không có nhãn.
 Số sê-ri khối là 8888-1666

 Thư mục của C: \ Users \ John \ Desktop \ thư mục

29/01/2011 07:16 PM.
29/01/2011 07:16 PM ..
29/01/2011 07:07 PM một số tên thư mục (2008)
29/01/2011 07:07 PM một số tên thư mục (2009)
29/01/2011 07:16 PM 282 ren.pl
               1 tệp 282 byte
               4 Dir (53) miễn phí 53.349.425.152 byte

1

Tôi khuyên bạn nên chạy tên tệp thông qua một kịch bản sed ngắn. for file in dir/with/files/*; do name=$(basename "$file" | sed 's/\./ /g;s/\([12][09][0-9][0-9]\)/(\1)/'); mv "$file" "$(dirname \"$file\")/$name"; done. Thay thế các dấu chấm bằng dấu cách, sau đó bao quanh năm bằng dấu ngoặc đơn.

Đảm bảo rằng nếu bạn đang quét / vận hành trên các tệp này, chúng sẽ được trích dẫn chính xác. Dấu cách thường được sử dụng làm dấu phân cách giữa các mục.


1
Đánh giá theo 'đợt' trong các thẻ, tôi nghĩ hệ điều hành của anh ta có thể là Windows. Điều đó nói rằng, anh ta vẫn có thể sử dụng các công cụ GNU trên Windows, tôi đoán vậy.
Matthieu Cartier

vâng, tôi đang chạy trên windows 7, bạn có thể sửa đổi tập lệnh của mình để thực hiện điều tương tự trên các thư mục không
McLovin

1

Trong PowerShell (mà tôi tin là được cài đặt theo mặc định trên Win7, mặc dù tôi không có máy Windows nên tôi có thể sai),

gci *.* | %{
 mi $_ ($_.name.replace('.', ' ').insert($_.name.lastindexof('.')+1, '(')+')')
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.