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 "$@"