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