免责声明:我对Bash脚本(一般来说是Linux)很陌生,所以请原谅我一个愚蠢的问题。
我的一个朋友给了我一个脚本,该脚本将某些文件的备份副本复制到Dropbox上。这是完整的代码:
#!/bin/sh
DATE=`date +%Y-%m-%d`
tarname='backup-'$DATE'.tar.gz'
cd ~/
directoriesToBack='.bashrc Desktop/School/ Desktop/Research\ Project'
tar -X ~/Desktop/My\ Programs/scripts/crons/exclude.txt -zcvf $tarname $directoriesToBack
mv $tarname ~/Dropbox
变量
directoriesToBack
显然包含要复制的目录。 Exclude.txt是不备份文件的文本文件。如果尝试运行此脚本,由于出现
Desktop/Research Project
,我将收到错误消息:我的计算机将查找目录Desktop/Research
。我尝试使用双引号而不是单引号,并用普通的空格替换\
,但是这些尝试均无效。有谁知道如何备份目录中带有空格的目录? 最佳答案
请勿尝试使用字符串执行此操作。它不会起作用,并且会引起疼痛。有关各种详细信息和讨论,请参见I'm trying to put a command in a variable, but the complex cases always fail!。
请改用数组。
#!/bin/bash
DATE=$(date +%Y-%m-%d)
tarname=backup-$DATE.tar.gz
cd ~/
directoriesToBack=(.bashrc Desktop/School "Desktop/Research Project")
tar -X ~/Desktop/My\ Programs/scripts/crons/exclude.txt -zcvf "$tarname" "${directoriesToBack[@]}"
我还修复了变量/等的引用。并使用
$()
代替反引号来执行日期命令(因为$()
可以嵌套并且通常具有更好的语义和行为)。关于linux - 在Bash中处理目录名称中的空格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28053839/