私のホームディレクトリにファイルがあります
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
。変更したくないファイルを削除してください。したがって、上記のパターンは重要ではありません。みんな変更したいファイル、必要に応じて欠落しているファイルを手動で追加します。各行をxxx
XXXからmv xxx XXX
XXXに似ていますが、編集日のある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 dirname
。dirname
影響を受けたファイルのディレクトリ名はどこにありますか?
#!/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