2008-10-29 47 views
34

Có cách nào để đổi tên tệp theo lô trong thư mục con không?Đổi tên tệp trong thư mục con

Ví dụ:

Đổi tên * .html thành * .htm trong thư mục có thư mục và thư mục con.

+0

Bằng ngôn ngữ nào? –

+0

Theo lô, bạn có nghĩa là "nhiều lần một" hoặc theo cách .bat/.cmd/.sh không? Trước đây không phải là một câu hỏi lập trình, và trên Windows, có rất nhiều tiện ích miễn phí cho điều đó. Sau này cần chính xác hơn, ít nhất là hệ điều hành bạn nhắm mục tiêu. – PhiLho

Trả lời

67

của Windows command prompt: (Nếu bên trong một tập tin thực thi, thay đổi% x để %% x)

for /r %x in (*.html) do ren "%x" *.htm 

này cũng làm việc cho đổi tên giữa các tập tin

for /r %x in (website*.html) do ren "%x" site*.htm 
+3

Điều này không không hoạt động nếu tên thư mục có không gian trong đó – raven

+1

@raven bây giờ nó sẽ hoạt động –

+2

Đáng chú ý, điều này cũng làm việc để đổi tên chỉ là phần giữa của tập tin.Vì vậy, nếu tất cả các tập tin của bạn bắt đầu với trang web ... và kết thúc với .html và bạn muốn đổi tên chúng để bắt đầu với trang web cũng như thay đổi phần mở rộng, bạn có thể làm: 'for/r% x in (website * .html) làm ren"% x "site * .htm' – jonnybot

3

Trong Bash, bạn có thể làm như sau:

for x in $(find . -name \*.html); do 
    mv $x $(echo "$x" | sed 's/\.html$/.htm/') 
done 
2

tôi chắc chắn rằng có một cách thanh lịch hơn, nhưng đây là điều đầu tiên mà popped trong đầu tôi:

for f in $(find . -type f -name '*.html'); do 
    mv $f $(echo "$f" | sed 's/html$/htm/') 
done 
7

Đối với cửa sổ , đây là công cụ tốt nhất tôi đã tìm thấy:

http://www.1-4a.com/rename/

Nó có thể làm bất cứ điều gì VÀ có bồn rửa nhà bếp với nó.

Đối với Linux, bạn có rất nhiều ngôn ngữ kịch bản và trình bao để giúp bạn, như các câu trả lời trước đó.

+0

Kịch bản Perl tôi đã đăng hoạt động trên Windows (đã thử nghiệm trên Windows). –

+1

@BKB hầu hết các cửa sổ cài đặt không đi kèm với perl. và có vẻ như vô lý khi cài đặt perl chỉ để đổi tên các thư mục. đây là một giải pháp rào cản thấp – moogs

+0

Vì vậy, cài đặt một ứng dụng mà chỉ có thể đổi tên tập tin là ít vô lý hơn so với cài đặt một cái gì đó mạnh mẽ như perl? – RJFalconer

6
find . -regex ".*html$" | while read line; 
do 
    A=`basename ${line} | sed 's/html$/htm/g'`; 
    B=`dirname ${line}`; 
    mv ${line} "${B}/${A}"; 
done 
5

Trong python

import os 

target_dir = "." 

for path, dirs, files in os.walk(target_dir): 
    for file in files: 
     filename, ext = os.path.splitext(file) 
     new_file = filename + ".htm" 

     if ext == '.html': 
      old_filepath = os.path.join(path, file) 
      new_filepath = os.path.join(path, new_file) 
      os.rename(old_filepath, new_filepath) 
1

Trên Linux, bạn có thể sử dụng lệnh 'rename' để đổi tên tệp theo lô.

0

AWK trên Linux. Đối với các thư mục đầu tiên này là câu trả lời của bạn ... Ngoại suy bằng cách đệ quy gọi awk trên dir_path có lẽ bằng cách viết một awk mà viết chính xác này awk dưới đây ... và như vậy.

ls dir_path/. | awk -F"." '{print "mv file_name/"$0" dir_path/"$1".new_extension"}' |csh 
0

Đối với Windows, tôi đã thực hiện một convenient litte VBScript solution với đổi tên regex-based và Kéo & hỗ trợ Drop. Hãy thử nếu bạn thích - đặt nó vào một tập tin vbs và thả thư mục của bạn vào nó trong Explorer.

1
In bash use command rename :) 

rename 's/\.htm$/.html/' *.htm 

# or 

find . -name '*.txt' -print0 | xargs -0 rename 's/.txt$/.xml/' 

#Obs1: Above I use regex \. --> literal '.' and $ --> end of line 
#Obs2: Use find -maxdepht 'value' for determine how recursive is 
#Obs3: Use -print0 to avoid 'names spaces asdfa' crash! 
0

Trên Windows, The Rename thực hiện công việc khá tốt ở đó. Phần mềm miễn phí, nhưng không phải là nguồn mở.

2

Nếu bạn có forfiles (nó đi kèm với Windows XP và 2003 và các công cụ mới hơn tôi nghĩ), bạn có thể chạy:

forfiles/S/M * HTM/C "cmd/c ren @file *. HTML"

+0

Dưới đây là các ví dụ khác với forfiles: https://www.windows-commandline.com/rename-file-extensions-bulk/ –

1

Total Commander mà là một ứng dụng quản lý tập tin, cho phép bạn liệt kê & chọn tất cả các file trong thư mục & phụ dirs của nó, sau đó bạn có thể chạy bất kỳ của tổng chỉ huy các hoạt động trên chúng. một trong số đó là: đổi tên nhiều tệp đã chọn.

0

Trên Windows, bạn có thể tìm hiểu mã nguồn mở đơn giản C# hàng loạt tệp renamer ứng dụng trong https://filerenamer.codeplex.com làm việc với một đơn giản excel nộp. Cung cấp cho một tập tin excel với hai cột nguồn và đích đến ứng dụng này và nó được thực hiện.

0

Trên Unix, bạn có thể sử dụng rnm:

rnm -rs '/\.html$/.htm/' -fo -dp -1 * 

Hoặc

rnm -ns '/n/.htm' -ss '\.html$' -fo -dp -1 * 

Giải thích:

  1. -ns: string name (tên mới). /n/ là quy tắc chuỗi tên mở rộng đến tên tệp mà không có phần mở rộng.
  2. -ss: chuỗi tìm kiếm (regex). Tìm kiếm tệp có khớp.
  3. -rs: thay thế chuỗi có dạng /search_regex/replace_part/modifier
  4. -fo: nộp chế độ chỉ
  5. -dp: độ sâu của thư mục (-1 có nghĩa là không giới hạn).
+0

không có lệnh nào trên ubuntu –

Các vấn đề liên quan