1

我正在尝试将 $CurrentFile 从 $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 \;

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

谢谢你的帮助!

4

3 回答 3

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" \;
于 2012-10-03T13:43:00.447 回答
1

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

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

     -             -

你告诉 find 在当前目录中搜索 $CurrentDir. 去掉点并使用双引号来防止 shell 在find看到它们之前扩展名称。

find "$CurrentDir" -type f -name "$CurrentFile" -mtime "+$CurrentDay" -exec cp {} "$CurrentBackup" \;
于 2012-10-03T13:51:02.597 回答
1

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

echo $CurrentFile
echo "$CurrentFile"

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

于 2012-10-03T14:07:13.057 回答