初めてお答えするときは、悪くないことを願っています。
私はある種の同じ問題を抱えていました、私はシュライスの 答えとエイドリアンのコメントを組み合わせてそれをなんとか解決することができました。問題は、ext4で許可されているスペース文字またはその他の特別なファイルを含むいくつかのファイルにありました。
これにより、任意のUTF8ファイル名を処理する機能が追加されます。はい、これ:
find . -type f -iname \*.png.jpg -print0 | sed -z 'p;s/\.png\.jpg/\.jpg/' | xargs -0 -n2 mv
私は過去にsed(またはxarg?)がヌル文字を処理するのに問題があったことを読みました(どこを思い出せません)。もはやそうではないようです。
私のように、答えをコピーするだけでなく、彼らが何をしているのかを理解したい人のために、以下にいくつかの説明を追加しました。;-)
コマンドパラメータ:
探す 。:現在のディレクトリで検索
-type f:通常のファイルであるもの(例:デバイス、ディレクトリなどではない)
-iname:ファイル名に基づいて検索しますが、大文字と小文字は区別されません。画像ソフトウェアが「png」の代わりに「PNG」を書き込む場合に備えて
-print0:NULL文字で検出されたものを区切ります
sed -z:null文字を、処理するテキストのさまざまな要素の唯一の区切り文字と見なします。受信したテキストと変更されたテキストの両方
p:最初に受信した行を書き込みます
s / .png.jpg / .jpg /:.png.jpgを.jpgに置き換えて書き込みます
xargs -0:入力項目は他のものではなくヌル文字で終了します
-n2:sedから受け取った2つの引数をmvに送信します
各コマンドの機能:
探す :
file1.png.jpgNULLfile2.png.jpgNULLfile3.png.jpgNULLfile4.png.jpg
sed
file1.png.jpgNULLfile1.jpgNULLfile2.png.jpgNULLfile2.jpgNULLfile3.png.jpgNULLfile3.jpgNULLfile4.png.jpgNULLfile4.jpg
xargs
mv file1.png file1.jpg
mv file2.png file2.jpg
mv file3.png file3.jpg
mv file4.png file4.jpg