1. ホーム
  2. linux

[解決済み] BASHでmvを使ってファイル名にタイムスタンプを追加する。

2023-03-23 17:49:39

質問

私はLinuxの初心者ですが、簡単なbashスクリプトで問題を抱えています。

私は、実行中にログ ファイルに追加するプログラムを持っています。時間が経つにつれて、そのログ ファイルは巨大になります。私は、各実行前にログ ファイルをリネームして移動するスタートアップ スクリプトを作成したいと考え、効果的にプログラムの各実行に対して個別のログ ファイルを作成します。以下は、私がこれまでに得たものです。

pastebin

DATE=$(date +"%Y%m%d%H%M")
mv server.log logs/$DATE.log
echo program

実行すると、このようになります。

: command not found
program

logsディレクトリにcdしてdirを実行すると、このように表示されます。

201111211437\r.log\r

どうなっているのでしょうか?私が見逃している構文の問題があると仮定していますが、それを理解することができないようです。


UPDATE: 下の shellter のコメントのおかげで、問題は、私が Windows の Notepad++ で .sh ファイルを編集し、それから ftp でサーバーに送信し、ssh でファイルを実行しているという事実によることがわかりました。ファイル上でdos2unixを実行した後、それは動作します。

新しい質問です。ファイルを再送するたびにこの修正を実行する必要がないように、最初の場所でファイルを正しく保存するにはどうしたらよいでしょうか。

どのように解決するのですか。

あなたのスクリプトから投稿された数行は、私には問題ないように見えます。それはおそらく、もう少し深いものです。

どの行がこのエラーを与えているかを見つける必要があります。追加 set -xv をスクリプトの先頭に追加してください。これは、行番号と実行されているコマンドを出力して STDERR . これは、スクリプトのどこでこの特定のエラーが発生したかを特定するのに役立ちます。

ところで、あなたは シバング をスクリプトの先頭につけていますか?このような場合、私は通常、Shebangの問題であると考えます。たとえば、あなたが #! /bin/bash があって、bash インタプリタが /usr/bin/bash にある場合、このエラーが表示されます。

EDIT

新しい質問です。ファイルを再送信するたびにこの修正を行う必要がないように、最初の段階でファイルを正しく保存するにはどうすればよいでしょうか。

2 つの方法があります。

  1. を選択します。 編集->EOL変換->Unixフォーマット メニュー項目を選択します。いったん正しい改行コードが設定されると、Notepad++ はそれを保持します。
  2. すべての新しいファイルが正しい改行コードになるようにするために 設定->環境設定 メニュー項目を開き 環境設定 ダイアログボックスを表示します。その中から 新規文書/既定のディレクトリ タブを選択します。下の 新規ドキュメント フォーマット を選択し Unix のラジオボタンをクリックします。をクリックします。 閉じる ボタンをクリックします。