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 PMC
và pdf
từ 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 PMC
và pdf
từ 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ừ shell
dấ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 Debian
và phái sinh như Ubuntu
:
$ sudo update-alternatives --set rename /path/to/rename
(thay thế /path/to/rename
cho đường dẫn của perl's rename
lệ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
.pdf
tê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.
rename
nê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-linux
và một từ perl
cú pháp khác nhau. Cái mà bạn đang đề cập đến trông giống như cái util-linux
mà đôi khi được gọi rename.ul
để không bị nhầm lẫn với rename
từ perl
, trong khi trên một số hệ thống khác, rename
là cái từ produc-linux và cái từ perl
được gọi prename
.
rename 's/PMC// *.txt
và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ỏ .pdf
và 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ế .pdf
trong $i
khô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'
( zmv
xử lý các xung đột tiềm năng một cách duyên dáng).
.pdf
khỏi tên tập tin.