find -exec mv로 모든 것을 삭제 했습니까?


26

나는 이것을 스스로 알아 내려고 노력했다. 터미널에서 사용한 명령은 다음과 같습니다.

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

나는 pictures라는 디렉토리를 먼저 만들지 않았다. 발생한 사진은 pictures.gif라는 파일이 생성되었습니다. 파일을 찾은 다음 이동하면서 덮어 씁니까?

이 명령의 결과로 생성 된이 pictures.gif 파일은 무엇입니까?

파일이 여전히 드라이브 어딘가에 있습니까?


미안하지만 당신이 물건을 복구 할 수 있기를 바랍니다. .gif에 의해 미스터리-거기에서 무슨 일이 있었는지 아는 것은 흥미로울 것입니다.
— SEngstrom

7
디렉토리 이름을 작성하는 경우 추가 /하십시오! 항상! 그러면 디렉토리 만 될 수 있습니다.
— Monica와의 가벼움 경주

2
최고 답변처럼 : 지금 드라이브 사용을 중지하고 삭제 된 .jpg 파일을 복구하십시오. 그러나이를 위해 많은 이미지 형식 (Jpg 및 다른 원시 파일 등)을 알고 매우 철저한 공개 소스 및 크로스 플랫폼 PhotoRec을 권장합니다 .
— Olivier Dulac

답변:


45

먼저 : 이 드라이브 사용을 중지하십시오 . 읽기 전용으로 다시 마운트해도 더 이상 글을 쓰지 마십시오. 예, 사진을 삭제했습니다. 그들은 수 있습니다 복구 할 수 있지만, 더 당신은 드라이브, 당신은 아무것도를 복구해야하는 적은 기회를 계속 사용.

명령이 mv pic1.jpg pictures, mv pic2.jpg pictures등을 실행했습니다 . 호출 할 때마다 mv현재 pictures다른 그림으로 이름이 지정된 파일 을 덮어 썼습니다 .

파일을 동일한 파일 시스템 내에서 이동한다는 것은 파일을 포함하는 디렉토리에서 파일을 분리하고 새 이름으로 대상 디렉토리에 첨부하는 것을 의미합니다. 따라서이 명령으로 파일 데이터를 수정하거나 삭제하지 않았으며 사라진 이미지의 디렉토리 항목 만 있습니다.

파일 시스템의 여유 공간을 닦고 jpeg와 같은 것을 찾는 도구를 실행할 수 있습니다. 다행히도 모든 jpeg 파일은 인식 가능한 헤더로 시작합니다. 삭제 된 내용을 찾는 도구를 조각 도구 라고 합니다 . 우분투에는 recoverjpeg , 최우선 , testdisk 등 몇 가지가 있습니다. 사진이 별도의 홈 파티션이나 외장 드라이브에있는 경우, 하나 이상의 패키지를 설치하고 삭제 된 그림이있는 파티션을 가리 킵니다.

사진이 시스템 디스크에있는 경우 시스템 사용을 즉시 중지해야합니다. 다른 컴퓨터를 사용하여 라이브 CD 또는 USB를 다운로드하여 부팅하십시오. testdisk를 포함 하는 모든 라이브 CD 는 비용에 맞아야하지만 일부는 다른 것보다 사용하기 쉽습니다. 시스템 복구 CD 는 훌륭한 범용 시스템 복구 CD입니다. 우분투 구조 Remix 는 우분투 사용자에게 더 친숙 할 수 있습니다.


나중에 참조 mv -i할 수 있도록 파일을 덮어 쓰지 않는 한 사용 습관을들이십시오 . 에 대한 별칭이 이미있을 수 mv있지만 스크립트 나 명령에 의해 호출 mv될 때가 아니라 명령 행에 직접 입력 할 때만 시작 mv됩니다 find.

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

또한 /디렉토리 이름으로 간주되는 이름 뒤에 이름을 넣으면 디렉토리가 존재하지 않거나 해당 이름의 파일이 디렉토리가 아닌 경우 오류가 발생합니다.

$ : >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

의 함정을 피하기 위해 find대신 bash의 재귀 디렉토리 탐색 기능을 사용할 수 있습니다. 먼저 명령을 사용하여 켜야합니다 shopt -s globstar(이 행을에 추가 할 수 있습니다 ~/.bashrc.

mv **/*.jpg pictures/

bash에서는 **/디렉토리에 대한 심볼릭 링크를 순회하며이를 해제 할 수있는 방법이 없습니다. 디렉토리에 대한 심볼릭 링크를 통해 보이지 않는 재귀 순회를 원하면 zsh 또는 find를 사용하십시오.


1
두 번째 예제 세트에서 /after 를 생략 했습니까 pictures? 즉, 두 명령 모두에 mv foo.jpg pictures/()가 없어야 합니까? /mv
— Paddy Landau

@PaddyLandau 사실, 이것은 정말 나쁜 복사-붙여 넣기 또는 편집 실패였습니다. 보고서 주셔서 감사합니다.
— Gilles 'SO- 악마 그만'

13

모든 사진을 하나의 파일로 잃어버린 것 같습니다. 가장 정밀한 법의학 도구를 사용하여 일부 파일 을 복구 할 수 있지만 미디어 (디스크)를 사용할수록 성공률이 떨어집니다. (정확히 말하면 파티션이 더 오래 마운트 됩니다.)

다음에 디렉토리를 의미 할 때 슬래시를 추가하고 -i파일이 이미 존재하는 경우 확인을 요청 하는 옵션을 추가하십시오 .

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

6
예, 다시 강조해야합니다. 즉석 라이브 CD 환경에 들어가십시오! 이 파일들을 되돌리려면 지금 드라이브 사용을 중단해야합니다. 이미지를 다운로드하여 구워야하는 경우 다른 컴퓨터에서 이미지를 작성하십시오. 이 디스크에서 발생하는 활동이 적을수록 사진을 복원 할 가능성이 높아집니다.
— Oli

고마워 나는 당신의 대답을 먼저 보았고 즉시 기계의 플러그를 뽑고 멀티 부트 USB 복구 디스크로 재부팅했습니다.
— jtnewhou
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.