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ó?
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ó?
Câu trả lời:
Trong một thiết bị đầu cuối, cd
và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ỏ n
từ 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ó
n
) một cách dễ dàng.
rename 's/\:/-/g; s/%28/ /g; s/%29//g' ...
Đâ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 pattern
với replacement
trong 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 \
, '
và "
bằng cách thêm \
vào trước mỗi cái.
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.
Các renameutils
gói có một chương trình tiện dụng được gọi là qmv
cung 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. qmv
biế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/:/_/g
lệ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 do
bộ 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.
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
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)
@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