私はこれがうまくいくことを願っています:
$ 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のマニュアルページのパターンマッチングセクションにあります。