대상이 동일한 드라이브에있는 경우에만 mv를 사용하여 Unix에서 폴더를 이동하는 방법


10

unix mv 명령을 사용하여 폴더를 이동해야하지만 대상이 동일한 드라이브 또는 동일한 파일 시스템에있는 경우에만 가능합니다. 가장 좋은 방법은 무엇입니까?

linux  bash  shell  unix  mv 

1
여기서 드라이브는 "장치"를 의미합니까? 예를 들어 같은 하드 디스크?
Kent

동일한 장치, 예

답변:


9

를 기반으로 두 개의 디렉토리 나 파일이 동일한 파일 시스템에 속해 있는지 확인하는 방법 ( https://unix.stackexchange.com/ ) :

Linux의 쉘 스크립트에서 stat 로 수행 할 수 있습니다 .

stat -c "%d" /path  # returns the decimal device number

그래서 당신은 할 수 있습니다 :

file1=$(stat -c "%d" /path/file1)
file2=$(stat -c "%d" /path/file2)

그런 다음 비교하십시오.

다음과 같이 쓸 수도 있습니다 :

if [ $(stat -c "%d" /path/file1) -eq $(stat -c "%d" /path/file1) ]
then
    # mv sentence
fi

다른 옵션. 또한 Stackexchange 질문 에서 가져 왔습니다 .

if [[ $(df -P /path/file1 | tail -1) = $(df -P /path/file2 | tail -1) ]]
then
    # echo "same filesystem"
    # mv sentence
fi

리눅스 배포판에서 호환된다고 생각하십니까?

더 나은 방법을 전파하려면 $(...)대신을 사용하십시오 `...`. 후자는 전자를 위해 사용되지 않습니다.
Shahbaz

@Shahbaz 감사합니다. 방금 추천으로 편집했습니다!
fedorqui

@zapp 몰라 테스트해야합니다. 나의 경험에 stat따르면 적어도 SunOS에서는 때때로 까다 롭습니다. 그러나 리눅스이기 때문에 호환되기를 바랍니다. 내 우분투 12에서는 괜찮습니다.
fedorqui

%d(같은 파티션도) 당신과 함께하려고 다른 DIRS에 대해 다른 값을 출력 /하고/tmp
켄트

2

이것은 가장 깨끗한 솔루션은 아니지만 드라이브간에 하드 링크를 만들 수 없다는 사실을 사용할 수 있습니다.

ln /path1/file /path2/file 2> /dev/null
if [[ $? == 0 ]]
then
    rm /path1/file
fi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.