디렉터리를 다른 디렉터리로 이동할 때 대상 디렉터리가 없을 때 오류를 생성하는 간단한 방법이 있습니까?

디렉터리를 다른 디렉터리로 이동할 때 대상 디렉터리가 없을 때 오류를 생성하는 간단한 방법이 있습니까?

mv directory1 directory2/나는 이름을 잘못 입력하면 directory2실패하고 디렉토리가 존재하지 않는다고 경고할 것이라고 생각하는 습관이 있었습니다 . 결과적으로는 그렇지 않습니다.

이를 수행하는 간단한 방법이 있습니까? (대상 디렉터리가 존재하지 않는 경우 실패)

답변1

mv -t directory2/ directory1

에서man 1 mv:

mv [OPTION]... -t DIRECTORY SOURCE...

-t, --target-directory=DIRECTORY
모든 SOURCE인수를 다음으로 이동합니다.DIRECTORY

하지만 POSIX에서는 이 옵션이 필요하지 않습니다. 귀하는 mv이를 지원할 수도 있고 지원하지 않을 수도 있습니다.


예:

$ ls
$ # Nothing here so far
$ mkdir foo bar
$ # Let's move foo to bar/
$ mv -t baz/ foo   # Oops, a typo, with -t
mv: failed to access 'baz/': No such file or directory
$ mv foo baz/      # Oops, a typo, without -t
$ ls                        
bar  baz
$ 

답변2

를 사용 중이고 명령이 POSIX 이외의 옵션을 지원하지 않는 경우 bash에도 mv다음 과 같이 파일 에 -t함수를 정의할 수 있습니다 .mvdir.bashrc

mvdir() {
    if [ -d "$2" ]
    then
        mv "$1" "$2"
    else
        printf 'mvdir: "%s" does not exist, or is not a directory\n' "$2" >&2
        return 1
    fi
}

해당 함수 정의가 완료되면 다음과 같이 말할 수 있습니다.

mvdir directory1 directory2

보다 간결한 형태로 이 함수의 핵심 명령은 다음과 같습니다.

( [ -d directory2 ] && mv directory1 directory2 )

해당 논리는 함수에서 약간 확장되어 디렉토리2가 존재하지 않거나 디렉토리가 아닌 경우 오류 메시지를 보다 명확하게 표시할 수 있습니다. 대상 디렉토리가 존재하는 경우 mv가 실행되고 오류 메시지나 결과 코드가 에 의해 발생합니다 mv. 디렉터리가 존재하지 않으면 printf진단을 작성 stderr하고 함수는 오류를 나타내는 0이 아닌 결과 코드를 반환합니다.

테스트하려면 빈 디렉터리에서 시작하세요.

$ find *
find: *: No such file or directory
$ mkdir A
$ find *
A
$ mvdir A B || echo fail
mvdir: "B" does not exist, or is not a directory
fail
$ mkdir B
$ find *
A
B
$ mvdir A B || echo fail
$ find *
B
B/A

관련 정보