【发布时间】:2017-12-06 06:20:31
【问题描述】:
我正在编写一个 bash 脚本,以从 Time Machine 备份中递归复制过时的文件夹,然后进行重复数据删除。正如预期的那样,cp(复制)命令在循环外和直接在终端中使用时正确复制预期的“文件夹复制”(-R 和 -L 标志集) - 但不是放在脚本的循环中时,它只复制内容.这是由于循环内源路径中的特殊字符造成的吗?转义源路径中的 ' ' ' 失败,终端指示 cp 没有源。
脚本将包含时间机器日期的文本文件 ($source) 读取到数组 (DATES) 中,然后将预期文件夹复制到新目标。新的目标路径是根据用户输入构建的(即 read -p "Destination" dest)。
IFS=$'\n' read -d '' -r -a DATES < $source
for date in "${DATES[@]}"
do
cp -RL /Volumes/Time\ Machine\ Backups/Backups.backupdb/Stix\'s’s\ MacBook\ Pro/$date/Macintosh\ HD/Users/foldertocopy /$dest/$date/$name
done
当 cp 处于循环中时,将复制文件夹中的内容,就像没有设置 -R 标志一样。
要复制目录而不是内容,我应该做些什么更改?
更新: 在路径中使用 unicode 序列是可行的,尽管在这种情况下不是必需的。
【问题讨论】:
-
ls -d /Volumes/Time\ Machine\ Backups/Backups.backupdb/Stix*的输出是什么? (我只是想看看那个目录名称的真正样子。)另外,在 all 周围添加双引号cp命令中使用的变量,例如"$date"、"$dest/$date/$name" -
输出为:/Volumes/Time Machine Backups/Backups.backupdb/Stix 的 MacBook Pro
标签: bash unicode terminal tmux cp