2016-05-20 9 views
-3

イメージファイルとpdfファイルの名前をLinuxのフォルダに変更します。Linuxバッチリネームファイル

いくつかのファイルがサブサブフォルダにあるため、再帰的に実行する必要があります。

現在のファイル名パターンは次のようである:

an-yt-h-in-g-123word-123456-anything.jpg (.png .pdf) 

私の目標パターンは要するに

123456-anything.jpg (.png .pdf) 

ですが、私は-NumberString-前に、すべてを削除し、(NumberStringを含みます)、その後、すべてを維持したいです。

誰でも手助けできますか?おかげであなたが言ったようにすべてのファイルを厳密に命名されている場合、多く

+1

あなたは[tag:batch-file]のタグ情報を読んでいますか?私はそれがWindowsに関連していることを知っているとは思いません。 – aschipfl

+0

拾い上げてくれてありがとう。私は「バッチ」と打ち込んだので、バッチファイルが自動的に出てきます。間違いです。 – user1982312

答えて

0

このコマンドは、最後の "数字列"の位置を確認し、この位置から最後までのサブ文字列を出力します。 lsコマンドを別のものに変更することができます。 JPEGファイルのフラットディレクトリについて

ls | awk -F '-' '{ for(i=NF; i>=0; i--) { if (match($i, /^[0-9]+$/)) { print $i; for (j=i+1; j<=NF; j++){ printf "-%s" ,$j }; print "\n" } } }' $1 ORS=""

1

、あなたは元のファイル名がsによって保持されていると仮定して、新しい名前を取得するには、コマンド

echo $s | awk -F'-' '{printf "%s-%s", $5, $6}' 

を使用することができます。

リネーミングは、sも同様に元のファイル名である

mv $s $(echo $s | awk -F'-' '{printf "%s-%s", $5, $6}') 

mvで簡単に行うことができます。

+0

ありがとうPJ。私は明確に説明しなかった。現在のファイル名パターンは任意の長さにすることができます。 x-x-x-x-x-x-x-x-x-xxxx-123456-xxxxx.jpgのようなものです。 – user1982312

+1

ハイフンの数に関係なく最後の2つのフィールドは 'awk -F'- '' {printf"%s-%s "、$(NF-1)、$(NF)} '' – indiv

+0

Right、@indiv '私の答えは私よりも優れています。 –

0

-YT-H型G-123word-123456-anything.jpg

rename 's/.*-[0-9]+-[A-Za-z]+\./\1-\2/.' *.jpg 

再帰的に現在のディレクトリを訪問:

find . \(-name "*.jpg" -o -name "*.pdf" \) -exec rename 's/.*-[0-9]+-[A-Za-z]+\./\1-\2/.' {} ";"