一時変数にsedを渡す

一時変数にsedを渡す

拡張子にスペースや不要な末尾が含まれるファイルを bash で一括変更しようとしています。

例えば

abc.pdf.!ut.!ut

pdfファイル

本来よりも難しいことをしてしまった場合に備えて、進捗状況をすべて公開します。最初は次のようなものから始めました

for file in `find /Users/phwd/Desktop/Film\ Sheet\ Music\ Scores\ 2  *.\!ut.\!ut`;
do
 mv $file `echo $file | sed 's/\(.*\)\.\!\ut\.\!\ut/\1/'`;
done

上記はMV送信時にスペースで機能しなかったため、次のように変更しました

find /Users/phwd/Desktop/Film\ Sheet\ Music\ Scores\ 2  *.\!ut.\!ut | while read file
do 
    mv $file `echo $file | sed 's/\(.*\)\.\!\ut\.\!\ut/\1/'`;
done

これはほぼうまくいきましたが、MVは任意のメッセージを言い始めました

usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory

何か考えすぎているのでしょうか?

答え1

したがって、末尾を削除したいだけの場合は、!ut.!ut次のようなものをお勧めします。

for file in `find ...`; do
  mv "$file" "${file%.\!ut.\!ut}"
done

この場合、シェルは機能を果たし、末尾を削除します。この機能はパラメータ拡張

関連情報