web-dev-qa-db-ja.com

1行のコマンドでファイルの名前を変更する

このディレクトリがあり、ファイルの名前を変更したい:

===> ls -1 Der-vierte-Weise/
10 - 10 - Erkenntniss.ogg
1 - 01 - Hoffnung.ogg
11 - 11 - Wahrheit.ogg
12 - 12 - Dankbarkeit.ogg
13 - 13 - Kredits.ogg
2 - 02 - Familie.ogg
3 - 03 - Demut.ogg
4 - 04 - Freude.ogg
5 - 05 - Schoenheit.ogg
6 - 06 - Solidaritaet.ogg
7 - 07 - Entscheidung.ogg
8 - 08 - Hilfe.ogg
9 - 09 - Unterstuetzung.ogg

結果は次のようになります。

===> ls -1 Der-vierte-Weise/
01 - Hoffnung.ogg
02 - Familie.ogg
...

これを一般的なシェルツールで解決したいと思います。

10
guettli

rename...を使用できます.

rename -n 's/^[0-9]+ - //' *

実際にファイルの名前を変更するには、テスト後に-nを削除します

説明

  • s/old/new/oldnewに置き換えます
  • ^文字列の開始
  • [0-9]+いくつかの数字
18
Zanna

bashパラメータ展開により、必要な部分を最初から削除します。

for f in *[[:blank:]]*.ogg; do echo mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"; done

拡張フォーム:

for f in *[[:blank:]]*.ogg; do 
    echo mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"
done

echoはドライランニング用です。実際のアクションのためにそれを取り除きます:

for f in *[[:blank:]]*.ogg; do mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"; done

例:

% ls -1
1 - 01 - Hoffnung.ogg
2 - 02 - Familie.ogg

% for f in *[[:blank:]]*.ogg; do mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"; done 

% ls -1                                                                             
01 - Hoffnung.ogg
02 - Familie.ogg
9
heemayl