GNU/Linux >> Linux の 問題 >  >> Linux

BASH で mv を使用してファイル名にタイムスタンプを追加する

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

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

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

編集

<ブロック引用>

新しい質問:ファイルを再送信するたびにこの修正を実行する必要がないようにするには、そもそもファイルを正しく保存するにはどうすればよいですか?

2 つの方法:

<オール>
  • [編集] -> [EOL 変換] -> [Unix 形式] を選択します ファイルを編集するときのメニュー項目。正しい行末があれば、Notepad++ はそれらを保持します。
  • すべての新しいファイルの行末が正しいことを確認するには、[設定] -> [設定] に移動します メニュー項目をクリックして、Preferences をプルアップします ダイアログボックス。 新しいドキュメント/デフォルト ディレクトリを選択します タブ。 新しいドキュメントの下 およびフォーマットUnix を選択します ラジオボタン。 閉じるをクリックします ボタン。

  • このコマンドを使用して、ファイルを単純にローテーションします:

    mv output.log `date +%F`-output.log
    

    ローカルフォルダーには 2019-09-25-output.log があります


    mv server.log logs/$(date -d "today" +"%Y%m%d%H%M").log
    

    bash 内の単一行メソッドは次のように機能します。

    [一部出力]>$(date "+%Y.%m.%d-%H.%M.%S").ver

    は、ver 拡張子を持つタイムスタンプ名を持つファイルを作成します。次のような日付スタンプ ファイル名へのスナップ ショットをリストする作業ファイルは、それが機能していることを示します。

    find . -type f -exec ls -la {} \; | cut -d ' ' -f 6- >$(date "+%Y.%m.%d-%H.%M.%S").ver

    もちろんです

    cat somefile.log > $(date "+%Y.%m.%d-%H.%M.%S").ver

    またはもっと簡単

    ls > $(date "+%Y.%m.%d-%H.%M.%S").ver


    Linux
    1. バッシュ‘?

    2. Bash -cと位置パラメータ?

    3. Bashファイルの名前をカウンターで一括変更しますか?

    1. ファイル名が Bash でアンダースコア _ で正しく印刷されない

    2. bash スクリプトを使用して $PYTHONPATH に追加する

    3. bash の改行でテキストをエコーする

    1. Bashを使用してファイルから行を読み取る:対その間?

    2. nftw での警告

    3. noexec オプションを使用してファイル システムで bash スクリプトまたは c バイナリを実行する