私のディレクトリには、次のファイル名を持つファイルがあります。
01 ABC DEF.m4a
02 DEF ABC.m4a
etc...
私はこれを次に変換したいと思います。
1.m4a
2.m4a
etc...
コマンドラインを使用してこれをどのように実行できますか?
答え1
Perlバージョンrename
(時々と呼ばれるprename
)がある場合はそれを使用できます。
rename -n 's/^0*(\d+).*(\.m4a)\z/$1$2/s' [0-9]*.m4a
満足すれば、好きなように機能します。フラグを削除してください-n
。
これは正規表現の一致を使用します。
^
- 開始するにはテーマが必要です。0*
- 0個以上の「0」と一致します。(\d+)
- マッチそして覚えて1 つ以上の小数点以下の桁数.*
- すべてが一致するまで...(\.m4a)
- マッチそして覚えて テキスト「.m4a」\z
- トピックの終わりが必要です¶s
フラグ -.
すべてのバイトが一致することを確認します(改行を含め、ファイル名にも有効です)。
$1
次に、とを使用して$2
角括弧式の値を参照します。
ここでは1が必須ではありません。シェルが引数として指定したファイル名はすべてで終わり、.m4a
古いファイル名は.*
貪欲であるためです。$
ここでも機能できますが、rename
ファイル名(改行文字を含むゼロ以外のバイトシーケンスである可能性があります)に対して機能します。たとえば、タイトルの最後に一致することをお勧め\z
します。$
\z
今後最後の改行文字です。
答え2
たぶん
for FN in *.m4a; do mv -i "$FN" "${FN%% *}.m4a"; done
わかりますか?