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
. 기존 파일을 덮어쓰지 않습니다.