ファイル名から数字を削除

ファイル名から数字を削除

ディレクトリのファイル名を変更できませんMusic/

次の名前のリストがあります。

$ ls
01 American Idiot.mp3
01 Articolo 31 - Domani Smetto.mp3
01 Bohemian rapsody.mp3
01 Eye of the Tiger.mp3
04 Halo.mp3
04 Indietro.mp3
04 You Can't Hurry Love.mp3
05 Beautiful girls.mp3
16 Apologize.mp3
16 Christmas Is All Around.mp3
Adam's song.mp3
A far l'amore comincia tu.mp3
All By My Self.MP3
Always.mp3
Angel.mp3

同様に、ファイル名の前のすべての数字を削除したい(拡張子の3を除く)。

最初は、または数字のあるファイルのみを試しましたが、grep最初のステップでも成功しませんでした。可能になったら実際の名前を変更したいです。find -execxargsgrep

私が今試したことは次のとおりです。

ls > try-expression
grep -E '^[0-9]+' try-expression

上記のように正しい結果を得ています。その後、次の手順を試しました。

ls | xargs -0 grep -E '^[0-9]+'
ls | xargs -d '\n' grep -E '^[0-9]+'
find . -name '[0-9]+' -exec grep -E '^[0-9]+' {} \;
ls | parallel bash -c "grep -E '^[0-9]+'" - {}

似ていますが、「ファイル名が多すぎます」などのエラーが発生したり、まったく出力されません。問題は、別のコマンドでorを式として使用する方法がうまくxargs機能することです。find

ご協力ありがとうございます

ベストアンサー1

数字で始まるディレクトリ内のすべてのファイルを一覧表示するには、

find . -maxdepth 1 -regextype "posix-egrep" -regex '.*/[0-9]+.*\.mp3' -type f

アプローチの問題は、findファイルへの相対パスを返しますが、ファイル名自体だけが期待されることです。

おすすめ記事