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
自動ロード機能が提供され、zmv
zshファイル名の生成と拡張演算子のすべての機能にアクセスできます。
ここでの作業は比較的簡単です。で始まるファイルの最初の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文字が削除されます。