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.