"-"で始まるmp3ファイルの名前を変更する

"-"で始まるmp3ファイルの名前を変更する

iPodから曲を抽出しましたが、そうすると各曲の名前が「-[曲の元の名前]」に変更されました。最初の「-」を削除するbashスクリプトを作成したいと思います。なぜならそこにはおそらく1000曲があり、手動で名前を変更できないからです。これを行うためにmvとrenameを使用しようとしましたが、特殊文字のために機能しませんでした。インターネットで検索した結果、「-」を「」に置き換える解決策が見つかりましたが、問題は最初の「-」だけを削除し、他の潜在的な「-」は削除したくないということです。私の曲「名前。十分に明確に説明してほしいです。誰でも私を助けることができますか?

これは私のオリジナルスクリプトです。

#!/bin/bash
for f in *; do
  echo "${f}";
  if [[ ${f:0:1} == "-" ]]; then
    echo "renaming ${f}";   
    rename.ul ${f} ${f:1} *.mp3;
fi
done

答え1

for f in -*.mp3; do
  echo mv -- "$f" "${f:1}"
done

必要に応じて動作すると確信している場合は削除してくださいecho

--ファイル名がオプションとしてmv解釈されるのを防ぐには、ダブルダッシュ()が必要です-。ファイル名にスペースが含まれている場合は、変数を引用符で囲む必要があります。

答え2

ダッシュで始まるコマンドに引数を渡し、その引数がオプションとして解釈されることを望まない場合は、--まず(二重ダッシュ)を引数として渡します。ほとんどすべてのコマンドに対して、--「今からもうオプションはありません」を意味します。

rename.ul -- '-' '' -*

もう1つの可能性は、ダッシュで始まらないようにパラメータを並べ替えることです。必ずしも可能ではありませんが、ファイル名の場合はprependです./

rename.ul ./- ./ ./-*

ループが必要ないことに注意してください。  renameファイルリストをパラメータとして使用してください。また、完全なファイル名を渡す必要はなく、名前を変更したい部分だけを渡すだけです。 (実際のスクリプトの問題の1つは、ファイル名全体を置換文字列として渡し、毎回すべてのファイルのリストを渡して内容を混在させることです)。

返品変数の置換には常に二重引用符を使用してください。そうしないと、スクリプトはスペースを含むファイル名を処理できません。

関連情報