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