Làm cách nào để tìm kiếm các tập tin video trên Ubuntu?


12

Tôi đã tải xuống một video một vài tháng trước. Tôi không nhớ rõ tên mà nó được lưu. Có bất kỳ lệnh hoặc phương pháp nào sẽ chỉ xuất các tệp video để tôi có thể tìm kiếm video của mình ở đó không? Từ trang người đàn ông, tôi không thể tìm thấy bất kỳ tùy chọn tìm thấy làm công việc đó.

Tệp video tôi đã tải xuống có thể có bất kỳ tiện ích mở rộng nào (như webm, v.v.) và cũng có thể thời gian đó tôi đã đổi tên thành bất cứ thứ gì như 'abcde' mà bây giờ tôi không nhớ. Vì vậy, tìm kiếm không thể dựa trên tên tập tin!

(Chỉ cần đề cập đến một điểm tương đồng: Trong perl có các lệnh để kiểm tra xem một tệp là tệp văn bản hay nhị phân, v.v. Tương tự như vậy có thể có một cách để kiểm tra xem tệp video hoặc tệp đa phương tiện của nó)

Câu trả lời:


14

Ý tưởng cơ bản là sử dụng tiện ích tệp để xác định loại của từng tệp và lọc trên các tệp video.

find /some/directory -type f -exec file -N -i -- {} + |
sed -n 's!: video/[^:]*$!!p'

Điều này in tên của tất cả các tệp trong /some/directoryvà các thư mục con của nó theo cách đệ quy có loại MIME là loại video.

Các filelệnh cần phải mở tất cả các tập tin, mà có thể chậm. Để tăng tốc mọi thứ:

  • Hạn chế lệnh để các cây thư mục nơi mà nó có khả năng được, chẳng hạn như /tmp, /var/tmpvà thư mục home của bạn.
  • Hạn chế tìm kiếm đối với các tệp có kích thước nằm trong sân bóng phù hợp, giả sử ít nhất 10MB.
  • Hạn chế tìm kiếm các tệp có thời gian sửa đổi trong sân bóng phù hợp. Lưu ý rằng việc tải xuống tệp có thể đã đặt thời gian sửa đổi của nó thành thời gian tải xuống hoặc bảo toàn thời gian, tùy thuộc vào chương trình bạn đã sử dụng để tải xuống (và với cài đặt nào). Bạn cũng có thể lọc thời gian thay đổi inode (ctime), đó là thời gian tệp được sửa đổi lần cuối hoặc di chuyển xung quanh (được tạo, đổi tên, v.v.) theo bất kỳ cách nào.

Đây là một ví dụ hạn chế thời gian sửa đổi ít nhất là 60 ngày trước và thời gian không quá 100 ngày trước.

find /tmp /var/tmp ~ -type f -size +10M \
     -mtime +60 -ctime -100 \
     -exec file -N -i -- {} + |
sed -n 's!: video/[^:]*$!!p'

Lệnh 1 của bạn tìm nạp nhiều tệp khác (trừ video). Ví dụ: một dòng đầu ra là: /home/ravbholua/Downloads/Music_Command_line/[SOLVED] a code question regarding music file extensions_files/avatar774785_6.gif: image/jpeg; charset=binary Một dòng đầu ra khác là: /home/ravbholua/Free Computer Networking Books Download | Ebooks Online Textbooks.html: text/html; charset=iso-8859-1 Tôi chỉ cần các tệp video sẽ chạy trong trình phát vlc, v.v.
Ravi

@Ravi Tôi vô tình bỏ qua tùy chọn sedloại trừ các dòng không khớp (và cũng là tùy chọn filekhông ngắt dòng ở sai vị trí), xem phần chỉnh sửa của tôi.
Gilles 'SO- ngừng trở nên xấu xa'

Vâng Gilles, đó là những gì tôi muốn. Điều đó đã làm việc tuyệt vời! Sau khi chạy lệnh của bạn, tôi đã biết rằng hệ thống của tôi có nhiều video (một số hoàn chỉnh và một số chưa hoàn chỉnh) mà tôi không biết. Cảm ơn bạn.
Ravi

1
Đây là giải pháp lý tưởng nếu các tệp video của bạn không có tiện ích mở rộng có thể dự đoán được. Khu nghỉ mát filelà lựa chọn duy nhất.
Miguelg

13

Tìm kiếm theo tên tập tin

Như Chris đã đề cập trong câu trả lời của mình, bạn có thể sử dụng findđể làm điều này nhưng tôi thấy nó nhanh hơn nhiều khi tìm kiếm thông qualocate cơ sở dữ liệu .

Giả sử bản phân phối của bạn cung cấp cơ sở này, hầu hết các công ty lớn đều làm, Ubuntu, Fedora, CentOS, v.v.

Thí dụ

$ locate --basename .mp4 .mkv .wmv .flv .webm .mov .avi | head -5
/home/saml/Desktop/sample_mpeg4.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 1.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 10.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 2.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 3.mp4

Tìm kiếm theo loại tệp

Để tìm các tệp theo loại, bạn có thể sử dụng lệnh file để lấy danh sách thông tin về loại tệp cụ thể.

Đây là danh sách sơ bộ các loại tệp này từ hệ thống của tôi, Fedora 19.

  • .mp4: Phương tiện ISO, hệ thống MPEG v4, phiên bản 1
  • .mkv: Tệp EBML, matroska của người tạo
  • .wmv: Microsoft ASF
  • .flv: Video Flash Macromedia
  • .webm: WebM
  • .mov: ISO Media, phim Apple Apple
  • .avi: AVI

Bạn có thể sử dụng lệnh này để tìm tất cả các tệp trong /home/<user>thư mục của bạn .

$ find /home/<user> -type f -exec file {} + | \
    grep -E "MPEG v4|EBML|\
      Microsoft ASF|Macromedia Flash Video|WebM|Apple QuickTime movie|AVI"

Ngoài ra, bạn có thể sử dụng filevà tìm kiếm theo loại mime được phân loại là "video".

 -i, --mime
         Causes the file command to output mime type strings rather than 
         the more traditional human readable ones.  Thus it may say 
         ‘text/plain; charset=us-ascii’ rather than “ASCII text”.

Điều chỉnh những gì chúng ta đã làm ở trên với những thứ như thế này:

$ find /home/<user> -type f -exec file -i {} + | grep video

Bạn có thể sử dụng sedđể chỉ lấy tên tệp:

$ find /home/<user> -type f -exec file -i {} + |
    sed -n '/video/s/:[^:]\+$//p'

+1, tất nhiên, điều này cũng không chỉ giả định đã locateđược cài đặt mà cơ sở dữ liệu được xây dựng.
Chris Xuống

Có, cơ sở dữ liệu thường được xây dựng hàng đêm trên hầu hết các bản phát hành, vì vậy các tệp được thêm gần đây sẽ không có trong DB cho đến khi công việc hàng đêm đã chạy và thêm chúng.
slm

1
Bạn đã quên một trong những phổ biến nhất , avi.
Faheem Mitha

6

Vì bây giờ bạn xác định rằng nó không thể dựa trên tiện ích mở rộng, bạn cũng có thể xem qua file(cảnh báo: việc này có thể mất nhiều thời gian):

find ~ -type f -exec file -i {} + | grep video 

Nếu bạn có thể đã tìm kiếm theo tên tệp, giả sử rằng nó có phần mở rộng video phổ biến và nó nằm ở đâu đó trong thư mục chính của bạn:

find ~ -type f -name '*.mkv' -o -name '*.mp4' -o -name '*.wmv' -o -name '*.flv' -o -name '*.webm' -o -name '*.mov'

Bạn cũng có thể sử dụng regex:

find ~ -type f -regex '.*\.\(mkv\|mp4\|wmv\|flv\|webm\|mov\)'

Nếu bạn có ý tưởng hay về thời điểm bạn tải xuống (và giả sử thời gian được đặt thành thời gian đó), bạn cũng có thể thử thu hẹp nó với -mtimetùy chọn GNU find .


1
Bạn cũng có thể hiển thị tất cả các tệp có kích thước lớn hơn một số ngưỡng (giả sử các tệp video rất lớn) ...
ChuckCottrill

Chris Down, cách sử dụng tên tệp sẽ không hoạt động. Tôi đã chỉnh sửa Q. xin vui lòng xem lại
Ravi

@Ravi Xem câu trả lời cập nhật của tôi, trong đó sử dụng mimetypes.
Chris Xuống

Lệnh 1 của bạn đang tìm nạp nhiều tệp khác (trừ video). Ví dụ, một dòng từ đầu ra là: /home/ravbholua/Downloads/Music_Command_line/Any s_w to cut_add audio files, convert video to audio?_files/post_old.gif: image/gif; charset=binary Dòng khác từ đầu ra là: /home/ravbholua/Downloads/Music_Command_line/command line - how to start a video from the terminal? - Ask Ubuntu.html: text/html; charset=utf-8 Nó không giải quyết mục đích của tôi.
Ravi
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.