名前変更コマンドを使用したファイル名の変更

名前変更コマンドを使用したファイル名の変更

次のコマンドにどのような問題があるか教えてください。

find /tmp/dir -name "* *" -type f | rename 's/*/fixed_/g'

注 - 私はループ構文ではなくコマンドを使用してこれを行うことを好みます。

私が望むのは、名前を追加して/tmp/dirの下のすべてのファイル名を変更することです安定_各ファイルの前に

たとえば(ファイル)

Fevc.txt
Ddve.txt

次に、名前を変更する必要があります。

fixed_Fevc.txt
fixed_Ddve.txt

ベストアンサー1

一時的な注意:問題があります。名前変更モードはパスを含むファイル名を処理しません。修正作業中です。

コマンドには2つのエラーがあります。

find /tmp/dir -name "* *" -type f | rename 's/*/fixed_/g'

  • スペースを含むファイル名のみを一致させます-name "* *"。これは欲しいものではありません。そうですか?

    • 解決策はこれを除外することです。特定の名前に一致するファイルを除外したくありません。すべてのファイルが欲しい。
  • このrenameモデルは2つの点で間違っています。

    • Shell globパターンを使用しましたが、正規表現、つまり正規表現である必要があります(一部の一般的なPerl式である可能性があります。無視して使用しますs///g)。
    • 固定パターンはフルネームに合わせて置き換えられますfixed_。技術的には「最初の0文字」をに「変更したい」fixed_。これと一致する行の先頭です^g1行に1回しか交換できないので省略できます。

すべてをまとめると次のようになります。

find /tmp/dir -type f | rename 's/^/fixed_/'

おすすめ記事