
拡張子にスペースや不要な末尾が含まれるファイルを 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
この場合、シェルは機能を果たし、末尾を削除します。この機能はパラメータ拡張。