Thay đổi nhiều tên tệp bằng cách thay thế một ký tự


29

Tôi có nhiều tệp có tên như that : screenshot 13:25.png
Windows đấu tranh để mở các tệp này có thể là do ":".

Làm thế nào tôi có thể thay thế nó?


2
Bạn có thể chấp nhận một câu trả lời để đánh dấu câu hỏi đã được giải quyết không? Điều này sẽ giúp rất nhiều cho người dùng khác.
MERose

Câu trả lời:


52

Trong một thiết bị đầu cuối, cdvào thư mục bên phải và sau đó chạy này.

rename 's/\:/-/g' *.png -vn

Điều này sẽ xem trước việc đổi tên. Nó nên thay thế :bằng -.

Nếu điều đó có vẻ đúng, loại bỏ ntừ cuối và sau đó nó sẽ thực hiện đổi tên thực tế.

Lưu ý : Các phiên bản Ubuntu trên 17.04 không được gửi kèm rename, nhưng nó vẫn có sẵn trong kho mặc định, vì vậy hãy sử dụng sudo apt install renameđể có được nó


Cảm ơn câu trả lời của bạn. Tôi đã thử và tôi gặp vấn đề này: Mẫu thay thế không bị chấm dứt tại (eval 1) dòng 1.
user236152

@ user236152 Xin lỗi, tôi đã phát điên một chút với các dấu gạch chéo thoát (đã ở chế độ lái tự động!). Đã xóa một vài và nó sẽ có hiệu lực ngay bây giờ.
Oli

Có lẽ một Tập lệnh Nautilus đơn giản thay thế tất cả các ký tự như vậy có thể gây ra sự cố trong các nền tảng khác (chạy trên tất cả các tệp đã chọn) có thể hữu ích cho những người "đa nền tảng".
Sadi

2
Tại sao sử dụng nó? Nó cho bạn thấy những gì nó đang làm (làm cho nó dễ dàng đảo ngược hơn nếu bạn mắc lỗi). Tại sao cuối cùng? Chỉ để bạn có thể loại bỏ nó (hoặc n) một cách dễ dàng.
Oli

1
@nightcrawler Bạn sẽ có thể xâu chuỗi các thay thế hoàn toàn riêng biệt:rename 's/\:/-/g; s/%28/ /g; s/%29//g' ...
Oli

10

Đây là một giải pháp bash thuần túy:

for i in *:*; do
    mv "$i" "${i//:/_}"
done

Các ${var//pattern/replacement}định dạng sẽ thay thế tất cả các lần xuất hiện patternvới replacementtrong biến $var. Để biết thêm thông tin về khả năng maipulation chuỗi của bash, xem tại đây .

Nếu bạn muốn làm điều này cho nhiều nhân vật, bạn có thể chỉ cần đặt chúng trong một lớp nhân vật. Vì vậy, ví dụ, để thay thế tất cả ;, :, =, +, %, ,với dấu gạch dưới, bạn có thể làm:

$ ls 
1foo:bar  2foo:bar:baz  3foo;bar  4foo=bar  5foo%bar  6foo,bar  7foo+bar
$ for i in *; do mv "$i" "${i//[:;=%,+]/_}"; done
$ ls
1foo_bar  2foo_bar_baz  3foo_bar  4foo_bar  5foo_bar  6foo_bar  7foo_bar

Về cơ bản, ý tưởng là [ ]có nghĩa any of the characters listed. Vì vậy, bằng cách đặt tất cả các ký tự bạn muốn thay thế trong lớp nhân vật, tất cả chúng đều được xử lý cùng một lúc.


Đối với các ký tự cụ thể mà bạn đã yêu cầu, mọi thứ phức tạp hơn một chút vì một số trong số chúng cần phải được thoát (Tôi bỏ qua /vì * nix không cho phép nó trong tên tệp nhiều hơn Windows vì vậy sẽ không phải là một vấn đề):

$ ls
1foo<bar  2foo>bar  3foo:bar  4foo\bar  5foo|bar  6foo*bar  7foo?bar  8foo"bar  9foo'bar
$ for i in *; do mv "$i" "${i//[<>:\\|*\'\"?]/_}"; done
$ ls
1foo_bar  2foo_bar  3foo_bar  4foo_bar  5foo_bar  6foo_bar  7foo_bar  8foo_bar  9foo_bar

Lưu ý rằng tôi đã thoát \, '"bằng cách thêm \vào trước mỗi cái.


Điều này có thể được tăng cường để thay thế một số ký tự riêng lẻ (ví dụ: tất cả những ký tự không được Windows chấp nhận) bằng các ký tự khác không?
Sadi

1
@Sadi xem câu trả lời cập nhật.
terdon

Về cơ bản có chín: "<>:" / \ | ? * "
Sadi

@Sadi xem câu trả lời cập nhật.
terdon

Cảm ơn, điều này có thể giúp tạo Tập lệnh Nautilus làm cho tên của (các) tệp được chọn tương thích với Windows.
Sadi

2

Nếu bạn thích GUI, hãy cài đặt pyrenamer:

sudo apt-get install pyrenamer

Sau đó chạy nó:

pyrenamer

Nó có hàng tá tùy chọn cho các mẫu và đổi tên định dạng.


1

Tôi thích GUI nhưng là tiện ích mở rộng Nautilus, tức là Nautilus Action Extra :

sudo add-apt-repository ppa:nae-team/ppa
sudo apt-get update
sudo apt-get install nautilus-actions-extra
nautilus -q

(Xem www.webupd8.org/2011/12/nautilus-ilities-extra-pack-of-usiously.html )

Sau đó, khi bạn chọn các tệp sẽ được đổi tên và nhấp vào Đổi tên từ menu ngữ cảnh, bạn được cung cấp nhiều tùy chọn để đổi tên tệp.


0

Các renameutilsgói có một chương trình tiện dụng được gọi là qmvcung cấp đổi tên hàng loạt tương tác. Bạn chạy nó trên một thư mục hoặc một danh sách các tệp và nó tạo ra một tệp văn bản tạm thời chứa tên tệp của chúng và bắt đầu trình soạn thảo yêu thích của bạn. Khi bạn thoát trình chỉnh sửa, mọi tên tệp bạn đã thay đổi sẽ được đổi tên tương ứng. qmvbiến một vấn đề đổi tên hàng loạt thành một vấn đề chỉnh sửa văn bản.

Trong trường hợp này, bạn có thể sử dụng qmv -f do *:*để chỉnh sửa tên của tất cả các tệp có chứa dấu hai chấm và sau đó là :%s/:/_/glệnh trong Vim (hoặc tìm kiếm và thay thế tương ứng trong bất kỳ trình soạn thảo nào bạn sử dụng).

Các -f dobộ tùy chọn định dạng của tập tin văn bản để có điểm đến tập tin có tên tuổi mà thôi, mà làm cho việc tìm kiếm và thay thế đơn giản hơn. Định dạng mặc định có hai bản sao của tên tệp trên mỗi dòng và bạn chỉ chỉnh sửa cái thứ hai. Điều đó cho phép nó thực hiện đúng nếu bạn đã xóa hoặc sắp xếp lại các dòng trong tệp, nhưng nó không phải lúc nào cũng dễ nhất. Có các định dạng khác nữa.

Với qmv, thay vào đó, bạn có thể chọn chuyển tệp được tạo thông qua lệnh bạn chọn, chẳng hạn như sed, nếu bạn không muốn khả năng tương tác.


0

Và đây là Tập lệnh Nautilus thay thế (tất cả?) Các ký tự không tương thích với Windows bằng dấu gạch nối trong tất cả các tên tệp đã chọn (dựa trên câu trả lời của terdon ;-)

#!/bin/bash
filesall=""
while [ $# -gt 0 ]
    do
        files=`echo "$1" | sed 's/ /\?/g'`
        filesall="$files $filesall"
        shift
    done
for i in $filesall; do mv "$i" "${i//[<>:\\|*\'\"?]/-}"; done

0

Thunar (trình quản lý tệp XFCE) có một tính năng xây dựng đẹp để đổi tên hàng loạt các tệp. Nó có các tùy chọn để loại bỏ / thay thế các ký tự, tìm kiếm và thay thế, đánh số tập tin và nhiều hơn nữa.

Cài đặt thunar:

sudo apt-get install thunar

Mở thunar, duyệt đến các tệp của bạn, chọn chúng và chọn 'đổi tên' (thông qua menu ngữ cảnh hoặc F2)


0
@echo off
echo.
echo. How many Characters Do You Want To Remove
echo.
echo. From The End Of The FileName ?
echo.
echo.
set /p variable=" > "
setlocal enabledelayedexpansion
for /f "delims=" %%a in (' dir /b /a-d *.mp3') do (
set oldName=%%a
Set newName=!oldName:~0,-%variable%!.mp3
Ren "!oldName!" "!newName!"
)
exit

Điều này hoạt động tốt và có một dấu nhắc biến ... Đặt tên cho tệp giống như _ Cắt bớt ký tự
cuối.cmd

3
Mặc dù điều này có thể đúng, nhưng điều này sử dụng ngôn ngữ kịch bản lệnh Windows. Chúng tôi đang sử dụng AskUbfox, một trang dành cho các câu hỏi liên quan đến Ubuntu và do đó là các công cụ liên quan đến Ubuntu. Quan điểm của tôi là câu trả lời này có thể không nhất thiết phải phù hợp ở đây.
Sergiy Kolodyazhnyy

Bạn cần chạy nó qua Wine nhưng có thể chạy nó trên Ubuntu ... Đây chỉ là một câu trả lời kỳ lạ.
Oli
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.