존재하지 않을 때만 이동하는 방식으로 사용할 수 있나요 mv file1 file2
?file1
file2
file2
나는 노력했다
yes n | mv -i file1 file2
(이렇게 하면 mv
file2를 덮어써야 하는지 묻고 자동으로 "아니요"라고 대답합니다.) 그러나 남용 외에도 -i
좋은 오류 코드도 제공하지 않습니다(이동하면 항상 0 대신 141, 이동하지 않으면 0이 아님). 그러면 다른 값입니다)
답변1
mv -vn file1 file2
. 이 명령은 원하는 대로 작동합니다. -v
원한다면 건너뛸 수 있습니다.
-v
장황하게 만드십시오 - mv는 파일을 이동했는지 알려줄 것입니다(파일이 이동되지 않을 가능성이 있기 때문에 유용합니다)
-n
file2가 존재하지 않는 경우에만 이동합니다.
하지만 참고하세요.이것은 POSIX가 아닙니다~처럼토마스 디키가 언급한.
답변2
mv -n
man mv
GNU 시스템 에서 :
-n, --no-clobber
기존 파일을 덮어쓰지 않습니다.
FreeBSD 시스템의 경우:
-n
기존 파일을 덮어쓰지 마십시오. (-n 옵션은 이전 -f 또는 -i 옵션보다 우선합니다.)
답변3
if [ ! -e file2 ] && [ ! -L file2 ]
then
mv file1 file2
# else echo >&2 there is already a file2 file.
fi
또는:
if ! ls -d file2 > /dev/null 2>&1
then
mv file1 file2
fi
mv
file2
존재하지 않는 경우 에만 실행하십시오. a가 테스트와 사이에 생성되었을 수 있으므로 a가 file2
덮어쓰여지지 않을 것이라는 보장은 없습니다 . 그러나 적어도 최신 버전의 GNU는 해당 보장을 제공 하지 않습니다 (비록 검사가 이루어지기 때문에 경쟁 조건이 더 좁기는 하지만). ) 이내에 완료되었습니다.file2
mv
mv
-i
-n
mv
반면에 이식성이 뛰어나므로 파일 유형 file2
(일반, 파이프 또는 심지어 파일 형식) 에 관계없이 다양한 경우를 구별할 수 있습니다.목차).
답변4
test -e name
이름이 존재하는 경우(파일, 디렉터리 또는 심볼릭 링크에 관계없이) true를 반환하는 which를 사용할 수도 있습니다.
예를 들어:
touch file
mkdir dir
ln -s file symlink
test -e file && echo file exists
test -e dir && echo dir exists
test -e symlink && echo symlink exists
test -e file || echo you wont see this echo
test -e doesnotexist || echo doesnotexist does not exist...