Có phải tôi vừa xóa mọi thứ với mv find -exec?


26

Tôi đã cố gắng để tìm ra điều này trên của riêng tôi. Đây là lệnh tôi đã sử dụng trong thiết bị đầu cuối:

find . -name "*.jpg" -exec mv {} pictures \;

Tôi đã không tạo một thư mục có tên hình ảnh đầu tiên. Điều gì đã xảy ra là một tập tin có tên Pictures.gif đã được tạo. Nó có tìm thấy các tập tin sau đó ghi đè lên chúng khi nó di chuyển chúng không?

Tập tin Pictures.gif này đã được tạo như thế nào là kết quả của lệnh này?

Các tập tin vẫn có thể trên ổ đĩa ở đâu đó?


Xin lỗi điều đó đã xảy ra với bạn và tôi hy vọng bạn có thể phục hồi công cụ. Được bí ẩn bởi .gif - sẽ rất thú vị khi biết chuyện gì đã xảy ra ở đó.
SEngstrom

7
Nếu bạn đang viết tên của một thư mục, hãy thêm /vào nó! Luôn luôn! Sau đó, nó chỉ có thể là một thư mục.
Cuộc đua nhẹ nhàng với Monica

2
Giống như câu trả lời hàng đầu nói: ngừng sử dụng ổ đĩa đó ngay bây giờ và cố gắng khôi phục các tệp .jpg đã bị xóa. Tuy nhiên, đối với điều này, tôi muốn giới thiệu PhotoRec mã nguồn mở và đa nền tảng , biết nhiều định dạng hình ảnh (Jpg, nhưng cũng có các tệp thô khác nhau, v.v.) và rất kỹ lưỡng.
Olivier Dulac

Câu trả lời:


45

Đầu tiên: ngừng sử dụng ổ đĩa này ngay bây giờ . Bạn có thể đọc lại nó ở chế độ chỉ đọc, chỉ cần đảm bảo không viết thêm. Có, bạn đã xóa hình ảnh. Chúng có thể được phục hồi, nhưng bạn càng sử dụng ổ đĩa đó, bạn càng có ít cơ hội để phục hồi bất cứ thứ gì.

Lệnh của bạn đã chạy mv pic1.jpg pictures, mv pic2.jpg picturesv.v ... Mỗi lệnh gọi mvghi đè lên tệp hiện được đặt tên picturesbởi một hình ảnh khác.

Di chuyển một tệp (trong cùng một hệ thống tệp) có nghĩa là tách nó khỏi thư mục chứa nó và đính kèm nó vào thư mục đích dưới tên mới. Vì vậy, không có dữ liệu tệp nào được sửa đổi hoặc xóa bởi lệnh này, chỉ có các mục nhập thư mục cho các hình ảnh đã biến mất.

Bạn có thể chạy một công cụ quét không gian trống của hệ thống tệp của bạn và tìm kiếm những thứ trông giống như jpeg. May mắn thay, mọi tệp jpeg bắt đầu với một tiêu đề dễ nhận biết. Các công cụ tìm kiếm nội dung bị xóa được gọi là công cụ khắc . Có một số ít trong Ubuntu, bao gồm recoveryjpeg , trước hết , testdisk , Bằng Nếu các ảnh nằm trên một phân vùng nhà riêng hoặc trên một ổ đĩa ngoài, hãy cài đặt một hoặc nhiều gói đó và trỏ chúng vào phân vùng có ảnh bị xóa.

Nếu ảnh nằm trên đĩa hệ thống của bạn, bạn cần ngừng sử dụng hệ thống của mình ngay lập tức. Sử dụng máy tính khác để tải xuống đĩa CD hoặc USB trực tiếp và khởi động từ đó. Bất kỳ đĩa CD trực tiếp nào bao gồm testdisk đều phù hợp với hóa đơn, nhưng một số đĩa dễ sử dụng hơn các đĩa khác. CD Cứu hộ hệ thốngCD cứu hộ hệ thống đa năng tốt. Ubuntu Rescue Remix có thể quen thuộc hơn đối với người dùng Ubuntu.


Để tham khảo trong tương lai, hãy tập thói quen sử dụng mv -itrừ khi bạn định ghi đè lên các tập tin. Bạn có thể đã có một bí danh cho mv, nhưng nó chỉ khởi động khi bạn gõ mvtrực tiếp vào dòng lệnh, chứ không phải khi mvđược gọi bởi một tập lệnh hoặc bởi findlệnh.

$ : >pictures
$ mv -i foo.jpg pictures
mv: overwrite `pictures'?

Ngoài ra, nếu bạn đặt tên /sau tên được cho là tên của thư mục, bạn sẽ gặp lỗi nếu thư mục không tồn tại hoặc nếu có tệp có tên đó không phải là thư mục.

$ : >pictures
$ mv foo.jpg pictures/
mv: cannot move `foo.jpg' to `pictures/': Not a directory
$ rm pictures
$ mv foo.jpg pictures/
mv: cannot move `foo.jpg' to `pictures/': Not a directory

Để tránh những cạm bẫy của find, thay vào đó, bạn có thể sử dụng tính năng duyệt thư mục đệ quy của bash. Bạn cần bật nó trước bằng lệnh shopt -s globstar(bạn có thể thêm dòng này vào ~/.bashrc. Sau đó:

mv **/*.jpg pictures/

(Lưu ý rằng trong bash, **/cũng truyền qua các liên kết tượng trưng đến các thư mục và không có cách nào để tắt điều này. Nếu bạn muốn một giao dịch đệ quy không xem qua các liên kết tượng trưng đến các thư mục, hãy sử dụng zsh hoặc find.)


1
Bạn đã bỏ qua /sau picturestrong tập ví dụ thứ hai? Tức là, không nên mv foo.jpg pictures/(với /) trong cả hai mvlệnh?
Paddy Landau

@PaddyLandau Thật vậy, đây là một lỗi sao chép hoặc chỉnh sửa thực sự xấu. Cảm ơn báo cáo.
Gilles 'SO- ngừng trở nên xấu xa'

13

Tôi sợ rằng bạn vừa mất tất cả hình ảnh của bạn vào tập tin duy nhất đó. Có thể khôi phục một số tệp bằng các công cụ pháp y như trước hết, nhưng tỷ lệ thành công giảm xuống khi bạn sử dụng phương tiện (đĩa) lâu hơn. (chính xác là, phân vùng được gắn càng lâu .)

Lần tới, khi bạn có nghĩa là một thư mục, hãy thêm dấu gạch chéo vào nó và thêm -itùy chọn để yêu cầu xác nhận trong trường hợp tệp đã tồn tại:

find -name "*.jpg" -exec mv -i {} pictures/ {} \;

6
Vâng, tôi phải nhấn mạnh lại: NHẬN VÀO MÔI TRƯỜNG CD NGAY LẬP TỨC NGAY LẬP TỨC! Nếu bạn muốn các tập tin này trở lại, bạn cần ngừng sử dụng ổ đĩa ngay bây giờ. Và nếu bạn cần tải xuống và ghi một hình ảnh, hãy làm nó từ một máy tính khác. Càng ít hoạt động xảy ra trên đĩa này, càng có nhiều khả năng ảnh của bạn được khôi phục.
Oli

Cảm ơn vì điều đó. Tôi thấy câu trả lời của bạn đầu tiên và ngay lập tức rút phích cắm trên máy và khởi động lại với đĩa cứu hộ usb đa điểm của tôi.
jtnewhou
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.