Làm cách nào để di chuyển số trong tên tệp, trong thao tác đổi tên hàng loạt?


13

Tôi đã cố gắng tìm ra cách đổi tên các tập tin trong vài giờ qua.

Tôi có 2000 tệp giống như thế này:

file.1.pdb
file.2.pdb
file.3.pdb

Tôi muốn đổi tên các tệp này thành một cái gì đó như:

file.pdb.1
file.pdb.2
file.pdb.3

Ý bạn không phải là bash ?
avazula

4
@avazula Không vui lòng đọc bài viết này: vi.wikipedia.org/wiki/Batch_renaming
Ali Razmdideh

@PerlDuck có;)
Ali Razmdideh


2
Này các cử tri thân thiết - tất cả các bạn có thực sự nghĩ rằng chúng ta chỉ cần một câu hỏi trong thẻ [đổi tên hàng loạt] không? Có bất cứ điều gì trong bài viết được liên kết thực sự giúp với nhiệm vụ trong câu hỏi này, ngoại trừ ý tưởng sử dụng rename? Dường như với tôi rằng nếu một câu hỏi đổi tên hàng loạt có chi tiết cụ thể, chúng ta chỉ nên cung cấp câu trả lời cụ thể cho nó.
Zanna

Câu trả lời:


15

Nếu bạn đã renamecài đặt, bạn có thể sử dụng

rename -n 's/(\.\d+)\.pdb$/.pdb$1/' *.pdb   # just watch what WOULD happen
rename    's/(\.\d+)\.pdb$/.pdb$1/' *.pdb   # actually rename the files

Lệnh renamecó thể được cài đặt thông qua

sudo apt install rename

11

Thông qua mmv(đổi tên nhiều tệp theo mẫu ký tự đại diện) thật dễ dàng:

mmv '*.*.*' '#1.#3.#2' *.pdb

hoặc zmvcủa zshvỏ; đó là một mô-đun cho phép đổi tên; xem ZMV-Ví dụ :

zmv -w '*.*.*' '$1.$3.$2' *.pdb

3
Cả hai mmvzmvcó vẻ khá kỳ lạ với tôi. Bạn có nhớ xây dựng một chút những gì họ là và những gì họ làm?
PerlDuck

2
Tôi đã thêm một liên kết đến manpage và ví dụ của họ.
αғsнιη

mmvlà khá mát mẻ. Có vẻ phù hợp hơn với loại đổi tên này hơn rename, mặc dù kém linh hoạt về mặt khớp tên.
JAB

11

Sử dụng Perl rename:

rename -n 's/(\.\d+)(\.pdb)/$2$1/' *.pdb

Giải thích nhanh:

  • *.pdbKhớp tất cả các tệp kết thúc bằng .pdb. (Thực hiện bằng vỏ)
  • (\.\d+)Ghép một dấu chấm bằng chữ, sau đó một hoặc nhiều chữ số thập phân. Các parens tạo ra một nhóm phù hợp.
  • $2$1 Đảo ngược các nhóm kết hợp thứ nhất và thứ hai.
  • -nKhông có hành động (mô phỏng). Nếu đầu ra có vẻ tốt, hãy chạy lại lệnh mà không có cờ này.

1
CƯỜI LỚN. Cùng suy nghĩ. Bạn đã nhanh hơn 48 giây.
PerlDuck

1
@PerlDuck Lol, yeah, cùng suy nghĩ. Các câu trả lời cũng bổ sung khá tốt: bạn bao gồm cài đặt, tôi bao gồm cú pháp.
wjandrea

7

Bạn có thể sử dụng tập lệnh này:

for i in `seq 1 2000`; do
mv file.$i.pdb file.pdb.$i
done

Hoặc lệnh thân thiện sao chép-dán này:

for i in `seq 1 2000`; do mv file.$i.pdb file.pdb.$i; done

Để sử dụng các lệnh trên, hãy đặt tất cả 2000 tệp vào một thư mục và sau đó mở terminal trong thư mục đó, sau đó chạy lệnh trên trong đó.


5

Gần đây nautilus, trình quản lý tệp mặc định, đã nhận được hộp thoại đổi tên hàng loạt. Nó chưa đủ mạnh để làm những gì bạn muốn. Nhưng may mắn là có thunar, một trình quản lý tập tin thay thế có thể được cài đặt. Với hộp thoại đổi tên thunars, bạn có thể làm những gì bạn muốn bằng GUI.

Đầu tiên cài đặt thunar:

sudo apt install thunar

Bắt đầu thunar, điều hướng đến thư mục có tập tin của bạn. Sau đó chọn tất cả chúng. Nhấn F2.

Trong hộp thoại mở ra, một lần nữa, chọn tất cả các tệp. Thay đổi chế độ thành "Tìm kiếm & Thay thế" và thành "Tên & Hậu tố". Kiểm tra "Biểu thức chính quy". Bây giờ sử dụng như sau như tìm kiếm và thay thế các mẫu:

file\.(.+)\.pdb

file.pdb.$1

Cuối cùng nhấp vào nút đổi tên.

Ưu điểm của cách này là bạn có được bản xem trước trực quan về những gì sẽ xảy ra trước khi bạn thực sự đổi tên.

hộp thoại đổi tên thunar


1
Bạn có thể thực hiện hầu hết các chương trình in các tin nhắn tiếng Anh bằng cách thêm tiền tố vào lệnh LC_MESSAGES=POSIX, vd LC_MESSAGES=POSIX free. Hoạt động tương tự cho các ứng dụng đồ họa mặc dù trong trường hợp các ứng dụng liên tục như Nautilus trong cấu hình mặc định của nó, trước nautilus -qtiên bạn cần phải chấm dứt phiên bản trước đó .
David

@DavidFoerster cảm ơn đã đề cập, thay thế hình ảnh.
Sebastian Stark

3

Bạn có thể sử dụng renametừ util-linuxnày (lệnh được gọi rename.ultrong ubfox):

rename.ul .pdb '' *
rename.ul "file." "file.pdb." *

Điều này đầu tiên loại bỏ .pdbphần mở rộng từ cuối và sau đó chèn lại phần mở rộng vào giữa.


1
Tuyệt đấy. Tôi đã không nhận thức được rename.ul. Cú pháp là một chút, ừm, bất ngờ, nhưng nó thực sự hoạt động theo cách bạn quảng cáo. Thêm vào đó, nó cũng có một công tắc -n(không chạm, chỉ cần nói).
PerlDuck
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.