이 명령을 사용하여 mv
일부 파일을 잃어버렸습니다 . 나는 그들이 어디에 있는지 모른다. 복사하려는 디렉토리에 없습니다.
제가 작성한 기록은 다음과 같습니다.
samuelcayo@CAYS07019906:~/Downloads/221-tp2-public-main$ cd
samuelcayo@CAYS07019906:~$ ls
Desktop Documents Downloads GameShell Music Pictures pratice Public Templates Videos
samuelcayo@CAYS07019906:~$ mkdir tp2
samuelcayo@CAYS07019906:~$ ls
Desktop Documents Downloads GameShell Music Pictures pratice Public Templates tp2 Videos
samuelcayo@CAYS07019906:~$ cd Downloads/221-tp2-public-main/
samuelcayo@CAYS07019906:~/Downloads/221-tp2-public-main$ ls
backup copybash Dockerfile ntfy-1.16.0 packets.txt README.md restore secret
cloud data Dockerfile_CAYS07019906 ntfy.zip rapport-tp2.md remplacer.sed sauvegarde.sh tail
samuelcayo@CAYS07019906:~/Downloads/221-tp2-public-main$ mv rapport-tp2.md tp2
samuelcayo@CAYS07019906:~/Downloads/221-tp2-public-main$ mv Dockerfile_CAYS07019906 tp2
samuelcayo@CAYS07019906:~/Downloads/221-tp2-public-main$ mv packets.txt tp2
samuelcayo@CAYS07019906:~/Downloads/221-tp2-public-main$ mv sauvegarde.sh tp2
samuelcayo@CAYS07019906:~/Downloads/221-tp2-public-main$ cd
samuelcayo@CAYS07019906:~$ cd tp2/
samuelcayo@CAYS07019906:~/tp2$ ls
samuelcayo@CAYS07019906:~/tp2$ ls -l
total 0
samuelcayo@CAYS07019906:~/tp2$ cd ..
답변1
홈 디렉터리에 라는 디렉터리를 만듭니다 tp2
. 즉, 디렉터리를 만듭니다 ~/tp2
. 그런 다음 으로 변경 ~/Downloads/221-tp2-public-main
하고 사용을 시작합니다 mv
.
mv
각 작업의 대상을 로 지정 tp2
하고 tp2
현재 디렉터리의 디렉터리가 아니므로 이동하는 모든 파일은이름 바꾸기 tp2
. 이후에 실행할 때마다 tp2
이전에 호출한 file 을 덮어씁니다 mv
. 결국 tp2
남은 것은 이전에 호출된 것입니다 sauvegarde.sh
.
~/tp2/
이를 모든 작업의 대상으로 사용하면 데이터 손실을 방지할 수 있습니다 mv
.
디렉터리를 ~
생성한 홈 디렉터리를 나타냅니다 . tp2
대상 경로의 끝에서는 /
반드시 필요한 것은 아니지만 mv
디렉토리가 아닌 경우 정상적으로 실패합니다.~/tp2
손실된 파일을 복구하기 위해 지금 할 수 있는 작업에 관해서는, 다른 곳에 복사본이 없다면 최근 백업에서 복원하는 것을 고려해 보세요.
답변2
mv
이 명령 (Ubuntu에 있음) 의 GNU 구현에는 해당 디렉터리가 기존 디렉터리인지 mv -t myDir
확인하는 명시적 옵션이 있습니다. myDir
이렇게 하면 mv Source Dest
(이동하다) 그리고 mv Source Directory
(이사 오다).
또한 args가 기본적으로 추가되는 xargs와 같은 구문에서 args의 순서를 수정합니다 find ... -print0 | xargs -r0 mv -t Dir --
(따라서 대상 디렉터리를 마지막에 배치할 수 없습니다). 두 경우 모두 문제를 피할 수 있습니다.
이 mv -i
옵션은 또한 실수로 파일을 덮어쓰는 것을 방지합니다.
답변3
대화형으로 이 작업을 수행하지 마세요.
mv file1 dest
mv file2 dest
mv file3 dest
최소한 첫 번째 명령의 결과를 확인하지 않고 다음과 같은 여러 명령을 실행하지 마십시오.
mv file1 dest
ls -l dest # is there a dest, containing file1?
대신 다음과 같이 하나로 결합하세요.
mv file1 file2 file3 ... dest
파일이 2개 이상일 경우 반드시 dest
존재해야 하는 디렉터리로 해석됩니다. 존재하지 않거나 디렉터리가 아니면 mv
실패합니다.
mv: target 'dfsafsdfdf' is not a directory
결과를 확인하지 않고 여러 명령을 실행하면 해당 명령이 제공하는 보호 기능을 상실할 수 있습니다.
mv
-i
기존 대상이 손상되지 않도록 하는 POSIX_standard 옵션이 있습니다 . mv
별칭을 만들어 대화형 명령에 포함 할 수 있습니다 .
alias mv='mv -i'