Linux 在Bash中处理目录名中的空格

Linux 在Bash中处理目录名中的空格,linux,bash,directory,Linux,Bash,Directory,免责声明:我对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\

免责声明:我对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项目而收到一个错误:我的计算机将查找目录Desktop/Research。我尝试使用双引号而不是单引号,并用普通空格替换\,但这些尝试都不起作用。有人知道如何备份名称中带有空格的目录吗?

不要尝试使用字符串。它不起作用,会引起疼痛。有关各种详细信息和讨论,请参阅

改用数组

#!/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[@]}"

我还修复了变量/etc的引号,并在日期命令执行中使用$而不是反勾号,因为$可以嵌套,通常具有更好的语义和行为。

带引号的cd Desktop/Research Project


您会发现许多语言中的代码都使用引号来表示空格

请运行脚本并显示准确的错误消息。我怀疑出问题的不是你所认为的。我怀疑envar directoriesToBack不是您想象的那样。

您的代码不幸产生了错误语法错误:unexpectedAh,true,/bin/sh不做数组。需要bash或其他shell。正在修复。此代码仍会生成错误消息:tar:Desktop/Research:Cannot stat:No此类文件或目录;tar:Desktop/Research:cannotstat:No这样的文件或目录这是一条评论,不是答案。