1つのフォルダにある複数のビデオファイルを変換する必要があります。それぞれの名前を変更する必要がありますが、各ファイル名に対してカスタム名を書き込むように求めるスクリプトが必要です。これが私が今まで得たものです:
まず、次のコマンドを使用して、スクリプトが実行するファイル名からスペースを削除する必要があります。
for f in *' '*; do mv "$f" "`echo $f | sed -e 's/ /_/g'`"; done
変換には必要ないため、ファイル拡張子を削除しました。私は次のコマンドを使用します。
for x in *; do mv $x $(echo ${x%*.*}); done
次に、パターンの各ファイル名を変更するにはforループが必要です。
for i in * ; do mv $i $customname; done
$customname
問題は、その段階で各ファイルの変数にどの名前を追加するかを尋ねるスクリプトが必要であることです。このような:
Rename file1 to:
.......
Rename file2 to:
.......
答え1
read
以下のようにSTDINで1行を読んでください。
for FILE in *; do
echo "Rename '$FILE' to:"
read NAME
mv "$FILE" "$NAME"
done
この例では、完了時に中断するにはCtrl-Cを押す必要がありますが、if
名前を入力しなかった場合など、追加の状況を追加して中断できます。
編集する:すべてのターゲットファイルに元のファイルと同じファイル拡張子がある場合(たとえば、ファイルが呼び出され、名前が変更されたファイルを手動で入力せずに終了を維持pogo.jpg
したい場合)、次のコマンドを変更できます。上記のループ:.jpg
mv
mv "$FILE" "$NAME.${FILE##*.}"
${FILE##*.}
上記の文字列の内容は、次のことを意味します。
${FILE...}
変数を表示し$FILE
ますが...##
一致する最も長い文字列を最初から削除します(#
最も短い文字列のみ一致)。*
0個以上の文字と一致します。.
リテラル期間の一致
完全な式(*.
)は一致する場合にのみ削除されます。したがって、元のファイル名にピリオドがない場合は、奇妙な結果が得られ、新しいファイル名になりますNEWNAME.OLDNAME
。
答え2
これは、テレビ番組から名前を取得するスクリプトを書く前にUSB-PVRで使用していました。
#!/bin/bash
for f in "$@"
do
echo Playing "$f"...
mplayer "$f"
echo That was "$f".
read -p "New name? " newname
if [ "$newname" != "" ]
then
mv -v -i "$f" PVR-"$newname".mkv
fi
sleep 1
done
ファイルの名前を変更する方法は本当に退屈です。