ファイル名の最初の4文字を削除します。

ファイル名の最初の4文字を削除します。

12xy[..].log次の問題があります。ファイル名を to 形式に変更したいと思います[...].log

私の問題は、それらのいくつかはa最初に懸念があり、一部はそうではないということvです。したがって、名前の一部を特定の文字に置き換えるロジックに従うコマンドは使用できません。 (下線など)

すばやく名前を変更する方法はありますか?

編集:常に同じプレフィックスを使用してくださいMD18。たとえば、名前の付いたファイルがあるか、MD18v230_SHAPE.log名前の異なるファイルMD18a004_FACES.logなどがあります。私は彼らv230_SHAPE.logに名前を付けたいと思いますa004_FACES.log

答え1

バッチの名前変更用に設計されたツールを使用します。なぜなら、このツールは、タスクを実行する前に完全であることを確認するのに熟練したり、実際に実行しなくても実行するタスクを表示できるテスト実行モードを提供しているからです。

そのうちのいくつかがありますが、最も人気のあるのはPerlです。renameこれは80年代から存在してきましたが、perlそれでも進化したもの(そしていくつかのバリエーション)に発展した非常に短いサンプルスクリプトです。これperlにより、文字列処理機能のすべての機能を使用できるため、可能性は無限です。

rename関連はありませんが、非常に制限されたコマンドもパッケージから呼び出されますutil-linux

mmvこれはまた、1980年代から使用された一括名前変更専用ツールです。かつて人気がありましたが、最近は流行が消えたようです。

zsh自動ロード機能が提供され、zmvzshファイル名の生成と拡張演算子のすべての機能にアクセスできます。

ここでの作業は比較的簡単です。で始まるファイルの最初の4文字を削除するだけですMD18。したがって、次のようになります。

rename 's/^MD18//' MD18*.log
mmv 'MD18*.log' '#1.log'
autoload zmv
zmv 'MD18(*.log)' '$1'

次のように、より簡単なシェルでいつでもループを使用できますbash

for file in MD18*.log; do
  mv -i "$file" "${file#MD18}"
done

ただし、特別なツールではこれを保証することはできません。ここでは、-iファイルの損失/上書き処理中にユーザーに中断する機会を提供するために、まだAlbeitを使用します。コマンドを前に追加してテストを実行することもできますecho

答え2

これらのファイル名はすべて12xyで始まりますか、それともファイル名の最初の4文字を削除しますか?すべてのファイル名が12xy_lmn.log、12xydef.log、12xyabc.log、12xyvw.log、...と同じですか?

その場合は、forループを使用して名前を変更できます。

for fn in ./12xy*.log 
do
    mv -i "$fn" "$(sed -e 's/^12xy//' <<< "$fn")"
done

競合を許可できる場合は、「mv -i」を「mv」に変更できます。

ただし、ファイル名から最初の4文字を削除するには、内容に関係なく次のように使用します。

for fn in ./*.log 
do
    mv -i "$fn" "$(sed -e 's/^....//' <<< "$fn")"
done

答え3

for file in /path/to/MD18*.log; do
    name=$(echo "$file" | sed -E 's/.{4}(.*)/\1/')
    mv "$file" "$name"
done

これにより、最初の4文字が削除されます。

関連情報