ファイル名のスペース間の単一のスペースとハイフンを置き換える

ファイル名のスペース間の単一のスペースとハイフンを置き換える

次のような名前のファイルがたくさんあります。

File one - some name - 01-05-2020  
File two - some name - 01-07-2020  
File three - some name - 01-15-2020  

私が必要とするのは、次のものを交換することです。

  • ハイフンで連結された単一のスペースです。
  • スペースの間にはハイフンとアンダースコアを使用してください。

私の予想結果は次のとおりです。

File-one_some-name_01-05-2020  
File-two_some-name_01-07-2020  
File-three_some-name_01-15-2020 

PD:私はArchベースのManjaroを使用しています。

答え1

1つの解決策はmv次のとおりですsed

for file in *; do echo mv "$file" "$(echo $file | sed 's/ - /_/g ; s/ /-/g')" ; done

変更をコミットするには、最初のエコーを削除してください。

テスト

$ for file in *; do echo mv "$file" "$(echo $file | sed 's/ - /_/g ; s/ /-/g')" ; done
mv File one - some name - 01-05-2020 File-one_some-name_01-05-2020
mv File three - some name - 01-15-2020 File-three_some-name_01-15-2020
mv File two - some name - 01-07-2020 File-two_some-name_01-07-2020

答え2

Larry Wallの「perlの名前変更」を使用する(renameDebian / Ubuntu、prenameRHEL / Centos / Fedora):

rename -n -E 's/ - /_/g' -E 's/ /-/g' {file[s]} 

実際の実行のために削除-n(またはで置き換え)します。-v

関連情報