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

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

私はこれがうまくいくことを願っています:

$ find . -type f -exec basename {} \; | while EFS= read -r f; do echo "${f##[0-9]}"; done 

ただし、たとえば、次のようなファイルの場合:

1フー
11バー

次を返します。

リッチ
1バー

いつ

豊富な
バー

楽しみです。

mv "$f"PS:結局、名前を変更したい(そして他の変更もしたい)。

編集する:

PS2:PSを考えると重複ではありません。とにかくレビュー用にマークされた答えは満足です。

答え1

if rename(時々呼び出されるprename)はオプションです。

find . -name '[[:digit:]]*' -type f -exec rename 's:^(.*/)\d+([^/]*)\z:\1\2:s' {} +

説明する:

  • ( )括弧内のパターンは保存され、発生回数だけ呼び出すことができます。
  • .*/ディレクトリ部分は保存する必要があります。
  • ([^/]*)\z: タイトルの最後まで / 以外のすべての文字です。
  • \1\2キャプチャされたディレクトリと出力名の数字の後のすべての項目を再印刷します。

最初に結果を確認するには、-nのオプションを使用してテスト実行を実行できます。rename

答え2

find . -type f -exec basename {} \; | while IFS= read -r f; do echo "${f##+([0-9])}"; done必要な結果を提供する必要があります。

+()これは、1つ以上の一致を意味する拡張パターン一致演算子を使用します。

追加情報は、bashのマニュアルページのパターンマッチングセクションにあります。

関連情報