名前の変更を使用してファイルから「.orig」を削除し、デフォルト名に「_1」を追加します。

名前の変更を使用してファイルから「.orig」を削除し、デフォルト名に「_1」を追加します。

ファイルをバックアップし、使用したファイルを上書きするのを防ぐためにスクリプトを使用していますcp --backup。これが原因example.mov.origtest.mov.orig。私は正規表現をまったく理解することはできませんし、名前の変更を使用してデフォルトの名前を切り取り、追加する方法を知っている.orig人がいるかどうか疑問に思います。_1

本質的に私が探している結果は、example.mov.orig私がexample_1.mov結合できるものに変更されるコマンドです。find /example/ -name *.*.orig

出力は次rename --versionのとおりです。util-linux-ng 2.18

答え1

必要なコマンドはrename次のとおりです。

  • 以下を使用renameする場合util-linux

    rename . _1. *.orig && rename .orig '' *.orig
    

    .で終わるすべてのファイルの場合、最初の項目は最初の項目を置き換えます.。 2番目のエントリはファイル名から削除されます。_1..orig.orig

  • perl-rename(Debianベースのシステムのデフォルト)を使用すると、状況がはるかに簡単になります。これはPerl準拠の正規表現を使用しているため、すべての操作を1段階で実行できるためです。

    rename 's/(\..*)\.orig/_1$1/' *orig
    

    このバージョンは正規表現を使用するため、最初の.\..tiはエスケープされていない「すべての文字」を意味するため、エスケープする必要があります)と一致し、それ.*までのすべての項目()と一致します.orig。最初のパターンは括弧内にあるため、「キャプチャ」され、後で呼び出すことができます$1。したがって、置換は、以前_1にaとキャプチャされたパターン(最初の拡張子)に一致するすべての項目を置き換え、同時に削除します.orig

次のコマンドを組み合わせることができますfind

find /example -name '*.orig' -exec rename . _1. {} +
find /example -name '*.orig' -exec rename .orig '' {} +

または:

find /example -name '*.orig' -exec rename 's/(\..*)\.orig/_1$1/'

これも必要ありませんfind。すべてのファイルが同じディレクトリにある場合は、上記のコマンドを直接使用するか再帰的に作成できます(bashを使用すると仮定)。

shopt -s globstar                               ## make ** recurse into subdirectories
rename.ul . _1. **.orig && rename.ul .orig '' **.orig  ## util-linux
rename  's/(\..*)\.orig/_1$1/' **orig                  ## perl rename

実際には、技術的には必要はありませんrename。シェルですべての操作を実行できます(参照:ここシェルの文字列操作機能に関する注):

for file in **/*.orig; do 
    newname="${file%%.*}_1.${file#*.}"
    mv "$file" "${newname/.orig/}"
done

最後に、globに関する注意(-name正規表現ではなくglobを使用してください。)。*.*.origWindows glob 構文は、 " .orig"で終わるすべてを意味します。これに対応するものと一緒に使用しなければならないのfindはです*.orig*単独で使用すると何でも一致し、使用すると*.*.orig2つの拡張子を持つファイル名のみが一致します。最後の拡張子は.orig

答え2

まず、システムにどのバージョンの名前変更がインストールされているかを確認する必要があります。

readlink -e $(which rename)

したがって、prename(.debホストのデフォルト):

prename 's/(\.[^.]*)\.orig/_1$1/' *.*.orig

rename.ulutil-linuxパッケージから

rename.ul \. _1\. *.*.orig     #add «_1» into file name
rename.ul \.orig '' *.*.orig   #remove «.orig» extention

関連情報