私のディレクトリに複数のファイルがあります。たとえば、
eventDataLog.txt.2015-04-23-22
eventDataLog.txt.2015-04-23-23
eventDataLog.txt.2015-04-24-01
eventDataLog.txt.2015-04-24-02
eventDataLog.txt.2015-04-24-03
eventDataLog.txt.2015-04-24-04
私はそれらをすべてに変えたい
abc-eventDataLog.txt.2015-04-23-22
abc-eventDataLog.txt.2015-04-23-23
abc-eventDataLog.txt.2015-04-24-01
abc-eventDataLog.txt.2015-04-24-02
abc-eventDataLog.txt.2015-04-24-03
abc-eventDataLog.txt.2015-04-24-04
これを行うためにmvコマンドをどのように使用できますか?私はこれを使用しました
mv eventDataLog.txt.2015-* ec2prod-eventDataLog.txt.2015-*
mv: target ‘ec2prod-eventDataLog.txt.2015-*’ is not a directory
しかし、うまくいきません
ただし、そのディレクトリには他の多くのファイルがあるため、答えは適切であり、eventDataLog.txtファイルも現在のファイルであり、使用中であるため無視する必要があります。
答え1
Bashはこのようなときに便利です。
for FILE in eventDataLog.txt.2015*; do mv "$FILE" "abc-$FILE"; done
答え2
コマンドを使用してこれを実行できますrename
。あなたの場合はこれを行いますrename eventDataLog.txt.2015 abc-eventDataLog.txt.2015 eventDataLog.txt*
。
使用される構文はですrename frompattern topattern listoffilessuchaswildcardmatch
。
答え3
私はこのmmv
ツールを使って次のことをします。
mmv eventDataLog.txt.\* abc-eventDataLog.txt.\#1
これは、バッチの名前を変更するために特別に設計されています。
答え4
注文する
for FILE in $(ls -1 | egrep '^eventDataLog' | egrep -v '^eventDataLog.txt$'); do mv $FILE abc-$FILE; done
ノート
egrep
正規表現をサポートするバージョンで、ほとんどのディストリビューションにgrep
含まれています。grep
- まず、
egrep
「eventDataLog」で始まるすべてのファイルをフィルタリングします。 - 2番目は
egrep
すべてのファイルをフィルタリングします。欲しくない(-v
注意事項駅match) は無視したいファイルのフルネームと一致します。
証明する
$ ls -1
eventDataLog.txt
eventDataLog.txt.2015-04-23-22
eventDataLog.txt.2015-04-23-23
eventDataLog.txt.2015-04-24-01
eventDataLog.txt.2015-04-24-02
eventDataLog.txt.2015-04-24-03
eventDataLog.txt.2015-04-24-04
myOtherFile
mySecondOtherFile
$ for FILE in $(ls -1 | egrep '^eventDataLog' | egrep -v '^eventDataLog.txt$'); do mv $FILE abc-$FILE; done
$ ls -1
abc-eventDataLog.txt.2015-04-23-22
abc-eventDataLog.txt.2015-04-23-23
abc-eventDataLog.txt.2015-04-24-01
abc-eventDataLog.txt.2015-04-24-02
abc-eventDataLog.txt.2015-04-24-03
abc-eventDataLog.txt.2015-04-24-04
eventDataLog.txt
myOtherFile
mySecondOtherFile