2012-10-03 65 views
1

我试图将$ CurrentFile从$ CurrentDir复制到$ CurrentBackup。我遇到的问题是该文件从父目录复制每个$ CurrentFile。 因此,例如,Shell脚本正在复制父目录中的每个文件

让的说输入这种

CurrentDir=/home/usr/logs 
CurrentFile='SystemOut_*' 
CurrentDay=6 
CurrentBackup=/backup 

但是,该命令将/家庭的/ usr/Serverinf至$ CurrentBackup复制每$ CurrentFile ...

find . $CurrentDir . -type f -name $CurrentFile -mtime +$CurrentDay -exec cp {} $CurrentBackup \; 

我不确定我做错了什么...有人能告诉我我做错了什么吗? 如果我不能使用这个命令,你能告诉我替代命令吗?

感谢您的帮助!

+0

你说它正在移动,但你正在使用cp。你确定它正在移动,而不是复制? –

+0

哦操作我的意思是复制不移动...但它仍然复制一切... – user1516649

+0

为什么有一个“。” $ CurrentDir之前和之后? –

回答

1

至于我可以告诉这个问题是多余的点:

find . $CurrentDir . -type f -name $CurrentFile -mtime +$CurrentDay -exec cp {} $CurrentBackup \; 

    -    - 

您正在寻找在当前目录中搜索$CurrentDir。摆脱点,并使用双引号,以防止壳在find有史以来看到它们扩大名称。

find "$CurrentDir" -type f -name "$CurrentFile" -mtime "+$CurrentDay" -exec cp {} "$CurrentBackup" \; 
+0

这就是我得到如果我调试,如果我运行此代码++找到''-type f -name'SystemOut_ *'-mtime +6 -exec cp'{ }'''''' 找不到:'没有这样的文件或目录 ++ find''-name'SystemOut_ *'-mtime +6 -delete find:can not search'':没有这样的文件或目录 – user1516649

+0

@ user1516649这是告诉你的名字'$ CurrentDir'未被设置(扩展为空字符串)。检查你的拼写和大小写,以确保它是你想要的名字。 (同样注意'$ CurrentBackup'也出现同样的问题。) – kojiro

+0

补充一点是你是对的....但是现在我得到了这个错误(当我重写时只是输入错误)run.sh:第57行:let:CurrentBackup =/home/usr/log:语法错误:operand e xpected(错误标记为“/ home/usr/log”).. CurrentDir的相同内容 – user1516649

5

您的$ CurrentDir前后有额外的点。除了$ CurrentDir之外,这将使它查找实际当前目录中的文件。

此外,围绕任何可能包含通配符的变量使用双引号很重要。

find $CurrentDir -type f -name "$CurrentFile" -mtime +$CurrentDay -exec cp {} $CurrentBackup \; 

更妙的是,把双引号的所有变量,除非你明确地需要把它扩展到多个参数:

find "$CurrentDir" -type f -name "$CurrentFile" -mtime +"$CurrentDay" -exec cp {} "$CurrentBackup" \; 
1

是啊,你的问题归结为doublequoting,防止做文件名扩展的bash,由沃恩卡托指出。当您执行以下两条命令时,请参阅输出的差异:

echo $CurrentFile 
echo "$CurrentFile" 

通常,双引号shell变量是个好主意。

+0

我不能低估这一点,因为双引号是问题的一部分,但它不是全部问题,所以我也无法赞成它。 – kojiro

相关问题