2016-11-08 5 views
-1

ダイナミックファイルの名前を変更して別のディレクトリに移動したいとします。 ファイル名は以下のとおりです。複数のファイルの名前を、動的ファイル名がUNIXの異なるディレクトリに移動しながら変更します。

File_{Date}_1 
File_{Date}_2 
File_{Date}_3 
File_{Date}_4 

新しいファイル名は次のようになります。

File_{Date}_1.txt 
File_{Date}_2.txt 
File_{Date}_3.txt 
File_{Date}_4.txt 

私はmvコマンドを使用しようとしたが、それは複数のファイルを移動することはできませんようです。 ファイルの数は固定されていないので、各ファイルを1行ずつ移動することはできません。 お助けください。 (あなたのファイルの名前の付け方に応じて、グロブ発現を変化させる)

rename 's/$/.txt/' File_* 

+0

[その他の類似の質問](http://stackoverflow.com/search?q=rename+%5Bbash%5D+is%3Aq)のいくつかを閲覧した後に、質問の範囲を絞り込んでください。 – chepner

答えて

0

findコマンドを使用して逃げることができるかもしれません。-exec

find /path/to/files/ -type f -exec mv {} /new/destination/ +

-execファイルの名前と{}を置き換えます。最後に、-execコマンドを\;の代わりに+で終了させることです。これは、それが{}を拡張して引数のカーネルの制限に達するまでコマンドを実行するのを待つべきであることをfindに伝えます。これは、ファイルの名前を変更しませんが

基本的には明らかにmv f1 f2 f3 f4 f5... fN /new/destination/

を行います。だから、あなたがコマンドを実行する前に、あなたは、単一のfindコマンドで逃げることができ、それにINGの」cdであなたのファイルを保持しているディレクトリの外に働くことができる場合、私は

cd /new/destination/; find ./ -type f -exec mv {} {}".txt" \;

を実行します仕上げるします。

cd /path/to/files; find ./ -type f -printf "%P\n" -exec {} c/{}.txt \;

残念ながらあなたが検索で終わる+で2 {}を使用することはできませんが、それでも、単一のコマンドを高速に実行する必要があります。希望すれば、いくつかの選択肢があります。

1

あなたは、ループを使用して、ファイルのそれぞれにmvコマンドを使用するか、renameコマンドを使用することができます。

+0

renameコマンドを使用するとこのエラーが発生します bash:rename:command not found – Pooja25

+0

これは、システムにインストールされていないことを意味します。代わりに単純なforループとmvを使用することもできます。 –

+0

ファイルが現在のディレクトリにあると仮定します(それ以外の場合はパスを使ってループを変更します)。 'File for *; do mv "$ {file}" "{file} .txt" || {エコー "エラー$ファイルを移動";出口1。 } done' –

関連する問題