? SSHからコピーするときにファイル名に追加

? SSHからコピーするときにファイル名に追加

私はコマンドを使用していますcp error.log error$HOSTNAME.log

このコマンドは、サーバー上で独自に実行すると正常に機能しますが、sshを使用してスクリプトとして実行される場合は、?ファイル名にaを追加します。スクリプトはssh他のサーバーの名前を使用してエラーログをローカルにコピーしますが、arerro$HOSTNAME.logこれは次のようにコピーされます。arerror$HOSTNAME.log?

ベストアンサー1

ファイル名には実際に疑問符が含まれていない可能性があります。代わりに、lsコマンドは印刷できない文字の代わりにこの文字を表示します。この文字がスクリプトで指定されたファイル名の末尾に表示されることを考慮すると、おそらくキャリッジリターン文字になります。

スクリプトにキャリッジリターンがあるのはなぜですか? Windowsエディタで編集しているからです。 Windowsは改行文字を表すために2つの文字シーケンスCR、LF(キャリッジリターン、改行)を使用しますが、UnixはLF文字のみを使用します。したがって、Unixの観点から見ると、スクリプトには最後の文字が通常の文字CRである行が含まれています。

Unixエディタを使用してスクリプトを編集したり、Unix行の末尾に保存したりできるWindowsエディタを使用します。

生成されたファイルを回復するには、次のコマンドを使用できます。

cr=$(printf '\r')
find . -name "*$cr" -exec sh -c 'for x do mv "$x" "${x%.}"; done' _ {} +

おすすめ記事