2017-01-14 6 views
0

名前に文字と数字のjpgファイルがたくさんあります。すべての文字を削除したいとします。たとえば、abc12d34efg.jpg1234.jpgになります。 forループについては、私は考えました:シェルからファイル名を削除して名前を変更する

for i in *.jpg; do mv "$i" ... 

しかし、私は何のためのコマンドを見つけることができません。ここで

+0

ビットが不足していますが便利です:データ損失のリスクなしに目的に合ったコマンドmmvがあります。 – linuxfan

答えて

0

は、いくつかは、それがここで

として
for f in *.jpg ; do 
    n="$(echo ${f} | tr -d a-zA-Z)" 
    mv "$f" "${n}jpg" 
done 

ようになり、フォーマットでtr

for f in *.jpg ; do n="$(echo ${f} | tr -d a-zA-Z)" ; mv "$f" "${n}jpg" ; done 

を使用するとしてonelineソリューションは、何が起こっているかです。

まず、からすべての文字を削除名前はtr -d a-zA-Zです。 abc12d34efg.jpgからは1234.(末尾にドットがあり、.a-zA-Z間隔に属していないため)、この値を変数$nに割り当てます。 T

$fから${n}jpgに名前を変更できます。それでおしまい。小文字と大文字の両方を削除する

更新は、文字ではなく、tr -d a-zを使用だけ小文字を削除するために、tr -d a-zA-Zを使用します。シェルパラメータの拡大に伴い

+0

ありがとうございます!それは動作しますが、私は大文字の別のcicleを実行しなければならなかった、とにかく非常に良い説明! – druido82

+0

@ druido82ようこそスタックオーバーフロー。答えがあなたの問題を解決した場合は、答えの横にあるチェックマークをチェックすることでそれを受け入れることができます。 –

1

for fname in *.jpg; do mv "$fname" "${fname//[[:alpha:]]}jpg"; done 

"${fname//[[:alpha:]]}"は何もない[[:alpha:]](任意の文字)のすべての出現の置換です。これによってもjpgが削除されるため、再度追加する必要があります。–には、jpgが追加されます。

1

sedを使用すると、すべての文字を正規表現を使用せずに置き換えることができます。

for i in *.jpg; do mv $i `echo $i | sed -e 's/[a-zA-Z]//g'`jpg; done 
+0

ファイル名にスペースが含まれていると失敗します。 –

関連する問題