シェルスクリプトで、日付を含むファイルの名前を別の日付に変更します。

シェルスクリプトで、日付を含むファイルの名前を別の日付に変更します。

私のホームディレクトリにファイルがあります

 member_net.2017-04-20.control
 member_elig_net.2017-04-20.control
 mdcr_contractr_net.2017-04-20.control

同じディレクトリにあるファイルの名前を別の日付に変更したいと思います。

 member_net.2017-04-21.control
 member_elig_net.2017-04-21.control
 mdcr_contractr_net.2017-04-21.control

このファイルはゼロバイトではありません。

答え1

別の方法は、例えばbashからシェルスクリプトを作成することです。

#!/bin/bash
for f in *.2017-04-20.* ;do
    mv "$f" "${f/2017-04-20/2017-04-21}"
done

この場合、他のソリューションよりもはるかに簡単ですが、常に他のソリューションを念頭に置いておくことをお勧めします。

答え2

Perlrenameコマンドを使用します。

rename -n -v 's/2017-04-20/2017-04-21/' *.control

-n何もしないことを示し、-v実際に実行する前に何をしたかを確認できるように詳細を示します。)

答え3

これが1回限りの場合は、次の手順が利便性と堅牢性の間で最善の選択だと思います。

  • パターンとともにlsを使用して必要なファイルを選択し、出力をファイルにリダイレクトします(パターンは単なる例ですが、次のステップでは重要ではありません)。

    ls member_net.*.control > file.list

  • お気に入りのエディタで編集してくださいfile.list。変更したくないファイルを削除してください。したがって、上記のパターンは重要ではありません。みんな変更したいファイル、必要に応じて欠落しているファイルを手動で追加します。各行をxxxXXXからmv xxx XXXXXXに似ていますが、編集日のあるXXXに変更します。この手順はエディタによって異なりますが、sed元のファイルを使用してpasteファイルをまとめて貼り付けることもできます。

    sed 's/2017-04-20/2017-04-21/g' file.list > newfile.list

    paste file.list newfile.list > bothfiles.list

    sed 's/^/mv /' bothfiles.list > commands.list

  • commands.list次の形式のコマンドラインを含むファイルが必要です。

    mv OLDNAME NEWNAME

  • 各コマンドラインが正確で完全であることを再確認してください。

  • その後、ファイルをシェルに転送してコマンドを実行できます。

    cat commands.list | bash

私が思う魅力はファイルをチェックし、完全に正しいことを確認してから全く触れないでくださいその中のすべてのコマンドを実行し、正しいことをしてください。

これはシェルスクリプトを書くのと同じくらい一般的ではありませんが、覚えておくと便利なテクニックです。

答え4

以下は役に立つシェルスクリプトです。別の日付を選択できます。現在日付を使用しています。シェルスクリプトをmyrename.shとして保存して呼び出します./myrename.sh dirnamedirname影響を受けたファイルのディレクトリ名はどこにありますか?

#!/bin/bash
for i in `ls $1 | grep -E '[0-9]{4}-[0-9]{2}-[0-9]{2}'`
do
    x=`echo $i | grep -oE   '[0-9]{4}-[0-9]{2}-[0-9]{2}'`
    y=`echo $i | sed "s/$x/$(date +%F)/g"`
    mv $1/$i $1/$y 2>/dev/null #incase if old date is same as current date
done

関連情報