Shell脚本正在从父目录复制每个文件

时间:2012-10-03 13:27:12

标签: linux bash shell unix aix

我正在尝试将$ CurrentDile从$ CurrentDir复制到$ CurrentBackup。我遇到的问题是这个文件从父目录复制每个$ CurrentFile。 例如,

让我们说输入就是这个

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

但是,此命令会将每个$ CurrentFile从/ home / usr / Serverinf复制到$ CurrentBackup ...

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

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

感谢您的帮助!

3 个答案:

答案 0 :(得分: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 :(得分:1)

据我所知,问题是多余的点:

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

     -             -

您告诉我要在当前目录中搜索 $CurrentDir。摆脱点,并使用双引号来防止shell在find看到之前扩展名称。

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

答案 2 :(得分:1)

是的,正如Vaughn Cato所指出的那样,你的问题归结为双引号,以防止bash进行文件扩展。执行以下两个命令时,请查看输出的差异:

echo $CurrentFile
echo "$CurrentFile"

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