Khôi phục tên tệp cho doc và RTF


1

Tôi có một số hàng trăm tệp .doc và .rtf bị mất tên gốc sau khi khôi phục từ đĩa cứng bị hỏng. Về cơ bản chúng trông như thế này:

f132765720.rtf
f136246056.rtf
f146124320.doc
f147595288.docx
f131673632.rtf

Tôi có thể đọc các tập tin mà không có bất kỳ vấn đề. Làm cách nào tôi có thể tạo lại tên tệp có ý nghĩa từ nội dung của tệp trong Linux?

Tệp mẫu: https://dl.dropboxusercontent.com/u/41225253/example.rtf

Câu trả lời:


3

Kịch bản dưới đây sẽ tìm thấy tất cả .docx.rtfcác tệp trong thư mục hiện tại và đổi tên chúng thành first_few_words.rtfhoặc docx. Đầu tiên bạn cần cài đặt catdoc. Trên Debian và các dẫn xuất của nó, bạn có thể làm điều đó với

sudo apt-get install catdoc 

Thật kỳ lạ, catdocmang lại cho tôi một segfault khi tôi thử nó trên một cái docxtôi có, vì vậy hãy sử dụng docx2txtcho các tệp doc thay thế:

sudo apt-get install docx2txt

Khi bạn đã cài đặt catdocvà vào thư mục chứa các tệp của bạn và chạy tệp này:docxcd

for file in *rtf; do 
  name=$(catdoc "$file" | grep . | head -1 | sed 's/ /_/g') &&
  mv "$file" "$name".rtf;
done
for file in *docx; do 
  name=$(docx2txt < "$file" | grep . | head -1 | sed 's/ /_/g') &&
  mv "$file" "$name".docx;
done

THẬN TRỌNG: Thao tác này sẽ xóa các tệp gốc, đảm bảo bạn sao lưu trước, chỉ trong trường hợp.

GIẢI THÍCH: cả hai tiện ích đều chuyển đổi docxhoặc rtfthành văn bản, sau đó tôi chọn dòng không trống đầu tiên của văn bản đó, chuyển đổi khoảng trắng thành dấu gạch dưới (về lâu dài sẽ giúp cuộc sống của bạn dễ dàng hơn) và đổi tên các tệp theo đó.


1

Đối với câu trả lời được cung cấp bởi @terdon Tôi muốn thêm rằng tôi thấy rằng nếu tôi thêm tiền tố vào mỗi tên tệp có ngày tạo, thì đó sẽ là một trợ giúp lớn.

Đối với ngày tệp .docx có thể được tìm thấy theo cách này:

unzip -p example.docx | grep dcterms:created |
    grep -o [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] | head -1

Đối với tệp .doc:

antiword -x db example.doc | grep date | grep -o '[0-9-]*'

Đối với tệp .rtf:

grep -o '\\creatim\\yr[0-9]*\\mo[0-9]*\\dy[0-9]*' example.rtf |
    grep -o [0-9]* | tr "\n" -
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.