cp 파일을 같은 이름의 파일이 있는 디렉터리로 복사

cp 파일을 같은 이름의 파일이 있는 디렉터리로 복사

cp매뉴얼에서 뭔가를 놓쳤다면 죄송합니다 . 하지만 같은 이름의 파일이 존재할 수 있는 디렉토리에 파일을 복사할 수 있는 방법이 있습니까? 예를 들어 대상 디렉터리에 같은 이름의 파일이 있으면 복사한 파일 이름에 접미사를 추가합니다. 그것은 다음과 같습니다:

ls foo
    file
cp file foo/
ls foo
    file
    file* 

제가 사용하고 있는 운영체제는 Ubuntu Gnu/Linux입니다.

답변1

이름이 이미 사용된 경우 대상 이름에 양의 정수를 추가하고 사용 가능한 이름을 찾을 때까지 정수를 증가시킵니다.

mycp () {
    local source="$1"
    local target="$2"

    local n

    # If the target pathname is a directory, add the source filename
    # the end of it.
    if [ -d "$target" ]; then
        target+="/$(basename "$source")"
    fi

    # Increment n until a free name is found
    # (this may leave n unset if the source filename is free).
    while [ -e "$target$n" ]; do
        n=$(( n + 1 ))
    done

    cp "$source" "$target$n"
}

참고: 이 함수는 소스 및 대상 경로 이름 이외의 매개변수를 허용하지 않습니다. 또한 bash쉘을 사용하고 있다고 가정합니다 .

"설치"하려면 셸에서 위 코드를 실행하거나 일반적으로 별칭과 기능을 추가하는 위치에 추가하면 됩니다.

시험:

$ ls
dir file
$ ls dir/
$ mycp file dir
$ ls dir/
file
$ mycp file dir
$ ls dir/
file    file1
$ mycp file dir
$ ls dir/
file    file1   file2

답변2

자신만의 기능을 출시할 수 있습니다. 더 이상 반복이 없을 때까지 밑줄이 계속 추가됩니다.

mycp() {
    if [[ -f "$2" ]]; then
        mycp "$1" "${2}_"
    else
        cp "$1" "$2"
    fi
}

인수 전달과 호환되지 않습니다(예 cp -p: ). 더 나은 옵션은 을 사용하는 것입니다 cp -n. 기존 파일을 덮어쓰지 않습니다.

관련 정보