파일을 복사한 다음 휴지통으로 이동하는 Bash 스크립트(비파괴)

파일을 복사한 다음 휴지통으로 이동하는 Bash 스크립트(비파괴)

cp 또는 바람직하게는 rsync를 사용하여 파일을 복사한 다음 소스 파일을 휴지통으로 옮기는 bash 스크립트를 작성하려고 합니다. 문제가 발생하면 소스 파일을 복원할 수 있기 때문에 mv를 사용하고 싶지 않습니다.

이 스크립트는 작동합니다. 대상 폴더를 하드코딩합니다.

for i in "$@"; do
    cp -a -R "$i" '/home/userxyz/Downloads/folder1'
    gio trash "$i"
done

그러나 대상 폴더 변수를 사용하는 이 스크립트는 작동하지 않습니다.

read -p "Enter destination folder: " destination

for i in "$@"; do
    cp -a -R "$i" "$destination"
    gio trash "$i"
done

대상으로 "/home/userxyz/Downloads/folder1"을 입력하면 오류가 발생합니다.

cp: cannot create regular file "'/home/userxyz/Downloads/folder1'": No such file or directory

다시 말하지만, 이것은 작동합니다:

for i in "$@"; do
    rsync "$i" '/home/userxyz/Downloads/folder1'
    gio trash "$i"
done

하지만 이것은 작동하지 않습니다.

read -p "Enter destination folder: " destination

for i in "$@"; do
    rsync "$i" "$destination"
    gio trash "$i"
done

실수:

rsync: change_dir#3 "/home/userxyz//'/home/userxyz/Downloads" failed: No such file or directory (2)
rsync error: errors selecting input/output files, dirs (code 3) at main.c(720) [Receiver=3.1.3]

"/home/userxyz/Downloads/folder1"이 존재하는 것을 확인했습니다. 내가 뭘 잘못했나요?

답변1

@berndbausch와 @Freddy님의 유용한 제안에 감사드립니다! 대상 이름의 작은따옴표가 문제인 것으로 밝혀졌습니다. 작은따옴표를 제거하고 불필요한 루프를 제거하도록 스크립트를 수정했습니다. 이제 rsync 및 cp와 함께 작동합니다.

read -p "Enter destination folder: " destination

dest="${destination%\'}" #remove the suffix ' (escaped with a backslash to prevent shell interpretation)
dest="${dest#\'}" #remove prefix ' (escaped with a backslash to prevent shell interpretation)

rsync -a -W "$@" $dest #or cp -a "$@" $dest
gio trash "$@"

관련 정보