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

ええ、あなたの問題は、Vaughn Catoが指摘したように、bashがファイル名拡張を行うのを防ぐために、二重引用符に要約されます。次の2つのコマンドを実行すると、出力の違いを確認できます。

echo $CurrentFile
echo "$CurrentFile"

一般に、シェル変数を二重引用符で囲むことをお勧めします。

于 2012-10-03T14:07:13.057 に答える
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" \;
于 2012-10-03T13:51:02.597 に答える