이동 명령을 사용했는데 모든 파일이 사라졌습니다.

이동 명령을 사용했는데 모든 파일이 사라졌습니다.

모든 데이터를 다른 폴더로 옮기다가 실수가 하나 있어서 이 명령을 실행했습니다.

mv * /*

이제 모든 파일이 사라졌습니다. 어떻게 찾을 수 있나요? 아니면 삭제되나요?

답변1

같은 모든 와일드카드는 *셸에 의해 확장되어 명령에 전달됩니다. 즉, 첫 번째 별표는 현재 작업 디렉터리의 파일로 바뀌고 두 번째 별표는 /에 있는 모든 파일로 바뀌었습니다. 이것을 실행하면 볼 수 있습니다

echo /*

내 시스템에서는 다음과 같은 결과가 발생합니다.

/bin /boot /dev /etc /home /lib /lib64 /lost+found /media
/misc /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var

따라서 귀하의 명령은 다음과 같습니다.

mv file1 file2 ... ... ... /tmp /usr /var

모든 것을 로 이동합니다 /var. 물론, 정확히 마지막 내용은 시스템에 따라 다를 수 있습니다. 그것이 무엇이든, 아마도 거기에서 파일을 찾을 수 있을 것입니다.

나는 당신이 루트로 실행되고 있다고 가정합니다. 그렇지 않았다면 /에 대부분의 디렉토리를 쓸 수 없었을 것이므로 아무 일도 일어나지 않았을 것입니다. 루트로 실행할 때는 각별히 주의하고 가능하면 피하십시오.

답변2

나는 이것으로부터 좋은 관찰을 했습니다:

mkdir test; cd test; mkdir t1 t2 t3
cd ~/
mkdir testmove;
cd testmove;
touch abcd
mv * ~/test/*

다음은 "abcd" 파일이 t1 및 t2 디렉토리와 함께 t3 디렉토리로 이동되는 흥미로운 부분입니다.

ls test
-> t3
cd t3
ls 
t1 t2 abcd

내가 이해한 것은 * 명령이 실제로 확장된 다음 실행되어 mv 명령이 다음과 같이 확장된다는 것입니다.

mv abcd ~/test/t1 ~/test/t2 ~/test/t3

따라서 t3을 대상으로 삼고 abcd,t1,t2를 t3으로 이동했습니다.

따라서 귀하의 질문에 대답하려면 /의 마지막 디렉토리에 있어야 합니다.

mv심볼릭 링크가 있는 경우 매뉴얼 페이지에서

Avoid specifying a source name with a trailing slash,
when it might be a symlink to a directory.  Otherwise, `mv' may do
something very surprising, since its behavior depends on the underlying
rename system call.  On a system with a modern Linux-based kernel, it
fails with `errno=ENOTDIR'.  However, on other systems (at least
FreeBSD 6.1 and Solaris 10) it silently renames not the symlink but
rather the directory referenced by the symlink.  *Note Trailing
slashes::.

다음을 사용하여 파일을 검색할 수 있습니다.find / -type f -name <filename>

관련 정보