Đổi tên tập tin trong thư mục


10

Cách đổi tên tệp trong thư mục, chẳng hạn như tệp sau : PMC21375.pdf.txt, tôi cần đổi tên thành 21375.txt. tức là tôi cần xóa cả hai PMCpdftừ mỗi tên tệp.

Câu trả lời:


9

Với 's rename:

rename 's/(PMC|\.pdf)//g' *pdf.txt 

Bản giới thiệu :

$ ls *txt
PMC21375.pdf.txt
$ rename -n 's/(PMC|\.pdf)//g' *txt 
PMC21375.pdf.txt -> 21375.txt

từ shelldấu nhắc. Nó rất hữu ích, bạn có thể đặt một số mã giống như tôi thay thế.

Bạn có thể loại bỏ -n(công tắc chế độ chạy khô) khi các bài kiểm tra của bạn trở thành valids.

cảnh báo 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.

Nếu bạn chạy lệnh sau ( linux)

$ file $(readlink -f $(type -p rename))

và bạn có một kết quả như

.../rename: Perl script, ASCII text executable

thì đây có vẻ là công cụ phù hợp =)

Nếu không, để làm cho nó mặc định (thường là trường hợp) trên Debianvà phái sinh như Ubuntu:

$ sudo update-alternatives --set rename /path/to/rename

(thay thế /path/to/renamecho đường dẫn của perl's renamelệnh của bạn .


Cuối cùng nhưng không kém phần quan trọng, công cụ này ban đầu được viết bởi Larry Wall, cha của Perl.


Điều này sẽ không loại bỏ .pdfkhỏi tên tập tin.
William Everett

Đăng bài chỉnh sửa cho phù hợp.
Gilles Quenot

5

Bên cạnh lệnh đổi tên, bạn có thể thực hiện trực tiếp trong bash (chỉ một cách của nhiều người):

 for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done

Chỉnh sửa để cho Pinyaka hoạt động như thế nào:

hmontoliu@ulises2:/tmp/foo$ touch PCM21375.pdf.txt PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ ls
   PCM21375.pdf.txt  PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done
hmontoliu@ulises2:/tmp/foo$ ls
   21375.txt  21376.txt

Điều này sẽ không xóa .pdftên tệp.
William Everett

Bạn đã thử chưa? bởi vì đối với tôi nó Thể hiện trong bản chỉnh sửa.
hmontoliu

Lỗi của tôi. Tôi nghĩ rằng nó sẽ chỉ chuyển đổi chữ in hoa. Nâng cao.
William Everett

4

Có một số tiện ích để đổi tên tập tin, nhưng một trong những tiện ích dễ sử dụng nhất là rename. Trong trường hợp của bạn, bạn có thể có thể làm:

rename PMC '' *txt
rename .pdf '' *txt

Tham số đầu tiên là một phần của tên tệp cần thay thế. Tham số thứ hai là chuỗi thay thế. Ở đây tôi đang sử dụng ''để đại diện cho chuỗi rỗng. Tất cả các tham số sau đây là các tệp để đổi tên, ở đây tôi đã sử dụng *txtđể giới hạn việc thay thế các tệp văn bản.

renamenên có mặt nếu bạn đang chạy Linux. Nếu bạn đang chạy * BSD hoặc OS X, bạn có thể phải cài đặt nó trước.


Tôi không biết có GNU rename. Có một từ util-linuxvà một từ perlcú pháp khác nhau. Cái mà bạn đang đề cập đến trông giống như cái util-linuxmà đôi khi được gọi rename.ulđể không bị nhầm lẫn với renametừ perl, trong khi trên một số hệ thống khác, renamelà cái từ produc-linux và cái từ perlđược gọi prename.
Stéphane Chazelas

1
Của tôi là một trong những từ linux-linux. Tôi đã lầm tưởng nó là một phần của lõi GNU.
wingbedubmariner

Phiên bản đổi tên Debian mặc định sẽ giống như thế này rename 's/PMC// *.txtrename s/\.pdf// *.txt
William Everett

1

Đầu tiên tạo một bản sao lưu các tập tin của bạn! Sau đó, về cơ bản, bạn có thể sử dụng một python one-liner trong thư mục hiện tại với dạng chung:

python -c "import glob,os; [os.rename(fn, fn.replace('PATTERN', 'REPLACE')) for fn in glob.glob('PATH/*')]"

trong trường hợp cụ thể của bạn, bạn có thể sử dụng hai lần:

python -c "import glob,os; [os.rename(fn, fn.replace('.pdf', '')) for fn in glob.glob('*')]"

để loại bỏ .pdfvà một lần nữa:

python -c "import glob,os; [os.rename(fn, fn.replace('PMC', '')) for fn in glob.glob('*')]"

để loại bỏ PMC.


0

Thử cái này:

for i in *.pdf.txt; do j=${i//\.pdf/}; j=${j//PMC/}; mv $i $j; done

Các j=${i//\.pdf/}phương tiện để thay thế .pdftrong $ikhông có gì. Tương tự như vậy với nhiệm vụ j thứ hai thoát khỏi PMC.


0

Nếu bạn đang sử dụng zsh, đó là một công việc điển hình cho zmv:

zmv 'PMC(*).pdf.txt' '$1.txt'

( zmvxử lý các xung đột tiềm năng một cách duyên dáng).

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.