mv
Đó là một dòng lệnh cơ bản được thiết kế để làm một việc và làm tốt điều đó (triết lý Unix): di chuyển tệp (s) hoặc directorie (s) .
Bạn có thể hack STDOUT
& STDIN
để sửa đổi khi đang bay chuỗi đích, nhưng đó không phải là một hack thông minh
đổi tên (Perl's one)
Có những công cụ khác có cùng tên có thể hoặc không thể làm điều này, vì vậy hãy cẩn thận.
Khi mọi người nói về rename
, chúng ta nghĩ về cái này, không phải cái ELF
kia, kém mạnh mẽ hơn (ma thuật?).
Nó không cơ bản, nó là Perl. Bạn có thể vượt qua một số chức năng của Perl bên trong và nó cực kỳ mạnh mẽ.
Xem xét ví dụ này:
Bạn muốn đổi tên một loạt các tập tin như
foobar_1.txt
foobar_2.txt
foobar_3.txt
Bạn có thể thêm các số không vào các chữ số sprintf()
như thế này (sử dụng regex, heh, đó là Perl: D):
rename 's/(\d+)/sprintf("%04d", $1)/e' foobar_*.txt
Bây giờ bạn có :
foobar_0001.txt
foobar_0002.txt
foobar_0003.txt
Không thực sự là một lệnh cơ bản, phải không?
đổi tên không thực sự được thiết kế để di chuyển dir (s) , nhưng nó có thể làm điều đó:
$ mkdir -p /tmp/foo/bar/base
$ touch /tmp/foo/bar/base/file
$ rename 's!/tmp/foo/bar/base/file!/tmp/file!' /tmp/foo/bar/base/file
Các tập tin di chuyển
/tmp/file
Một số mã chúng tôi thấy trên *.stackexchange.*
các trang web
for FILE in `ls *.txt`
do
mv ${FILE} `echo ${FILE} | sed 's/anything_ugly/anything_still_ugly/'`
done
Đó không phải là con đường để đi , đó là lỗi đơn giản, chỉ để giải thích tại sao sử dụng đúng công cụ vào đúng thời điểm
type -a rename
và làrename --version
gì?