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 PMCvà pdftừ mỗi tên tệp.
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 PMCvà pdftừ mỗi tên tệp.
Câu trả lời:
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ã perl 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ữ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.
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
.pdftên tệp.
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.
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.
rename 's/PMC// *.txtvàrename s/\.pdf// *.txt
Đầ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.
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.
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).
.pdfkhỏi tên tập tin.