문제

제가 자주 하는 다음과 같은 명령을 사용:

mv folder $something_that_does_not_exist
mv files* $something_that_does_not_exist

그 후,나는 깨닫는 파일은 사라졌습니다.나는 볼 수 없습니다 그들도 폴더에"$something_that_does_not_exist".어디에 있는 파일 및 폴더에 갔어요?어떻게 그들을 다시 얻을 수있?

도움이 되었습니까?

해결책

이 문제를 방지하기 위해, 나는 사용할 때 항상 디렉토리 이름의 끝까지 A / Alding을 추가하는 습관이 있습니다. cp 또는 mv:

$ touch foo
$ mv foo bar/
mv: cannot move `foo' to `bar/foo': No such file or directory

후행 슬래시없이 mv 파일의 이름을 바꿉니다. 파일이 이름이 변경되었음을 알 수 있습니다.

다른 팁

만약에 $something_that_does_not_exist 아무것도 확장하지 않습니다 (그러나 그것이 당신의 문제인지 확실하지 않습니까?) 그러면 첫 번째 MV가 실패합니다. 두 번째 MV 명령도 실패하지 않습니다 "files*" 정확히 두 파일로 확장하거나 마지막 파일 이름이 "files*" 디렉토리로 확장됩니다. 그러면 파일이 해당 디렉토리로 이동됩니다.

명령이 스크립트에 있고 변수를 확장하려고 할 때 스크립트가 중단되기를 원하고 설정되지 않은 경우 물음표 수정자를 사용할 수 있습니다. 예시:

$ echo ${DISPLAY?}; echo display
:0.0
display
$ echo ${MYTEST?}; echo mytest
bash: MYTEST: parameter null or not set
$

따라서 사용하는 경우

mv folder ${something_that_does_not_exist?}

그리고 something_that_does_not_exist 설정되지 않으면 다음 명령이 실행되지 않습니다.

할 수 없다는 것을 당신의 파일을 다시 얻을 수있는,쉘로 확장됩니다 당신의 파일을 내가 믿고 마지막에 파일 목록이 이제라는$something_that_does_not_exist.

다른 모든 파일에 목록은 되었을 것입 덮어 쓰기.그래서 당신을 얻을 수 없습니다.

편집:내 smoothwall VM(만 GNU/리눅스에서는 내 손가락 right now!) 이것을 얻을:

$ mkdir t1
$ mv t1 t2
$ ls
t2/
$ mv t2 t1
$ cd t1
$ touch f1 f2 f3 f4
$ mv f* ../t2
mv: target `../t2' is not a directory
mv folder $something_that_does_not_exist

이것은 오류가되어야합니다.

$ mkdir folder
$ mv folder
mv: Insufficient arguments (1)
Usage: mv [-f] [-i] f1 f2
       mv [-f] [-i] f1 ... fn d1
       mv [-f] [-i] d1 d2

다른 경우는 무엇에 달려 있습니다 files* 일치 :

mv files* $something_that_does_not_exist

최종 일치가 디렉토리 인 경우 파일을 찾을 수 있습니다. 그렇지 않으면 첫 번째 파일의 이름을 두 번째 파일과 동일하거나 위와 같이 다른 오류가있었습니다.

1) 디렉토리 "폴더"를 이동하려고합니다.

mv folder abcde

"ABCDE"가 기존 디렉토리 인 경우 "폴더"를 "ABCDE"로 이동합니다. "ABCDE"가 기존 파일 인 경우 명령이 실패합니다. 그렇지 않으면 "폴더"를 "ABCDE"로 바꿉니다.

2) 일부 파일을 이동하려고합니다.

mv files* abcde

"ABCDE"가 기존 디렉토리 인 경우 "파일*"을 "ABCDE"로 이동합니다. 그렇지 않으면 "파일*"에 일치하는 파일이 하나만 있으면 해당 파일을 "ABCDE"로 바꿉니다. 그렇지 않으면 명령이 실패합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top