ディレクトリ内の複数のファイルの部分ファイル名を変更します。

ディレクトリ内の複数のファイルの部分ファイル名を変更します。

かつて以下を実行するスクリプトがありました。現在のディレクトリにある複数のファイルのファイル名の一部が変更されます。

たとえば、

rename variable1 variable2

rename 456 555

入力する:

testa456testa
sama456sama
apple456applea
johna_456_johna
davida_456_davidb

出力:

testa555testa
sama555sama
apple555applea
johna_555_johna
davida_555_davidb

私はもはやスクリプトを持っておらず、Unixに初めて触れました。コマンドラインで使用できるスクリプトが必要です。

私が今やっていることは:

一時ファイル名としてリストされている「ls *(filename)」ファイルがあります。次に、%/s/456/555/g を検索します。その後、古いファイル名をすべて新しいファイル名に移動しました。 「$1を$2に名前変更する」コマンドラインからこれを行うことができます。したがって、特定のディレクトリのコマンドラインでファイル名の中央部分の名前を変更します。何百ものファイルがあるかもしれません。わかりました。 Ivanに感謝します。

答え1

シェルを使用してパラメーター拡張を使用します。

for f in *456*; do echo mv -i -- "$f" "${f//456/555}"; done

ここでは名前に含まれるファイルをもう一度繰り返し、456パラメータ拡張モードで${f//456/555}はを456使用します555

mv上記のコマンドは、実行するコマンドを表示してテスト実行され、echoジョブが発生するように削除できます。

for f in *456*; do mv -i -- "$f" "${f//456/555}"; done

そしてrenameprename):

rename -n 's/456/555/g' *456*

これにより、ファイル名のすべての(g456部分文字列が555s/456/555/)に置き換えられます。

-nテスト実行が行われ、変更が満足のいくものである場合は、削除して-n実際の名前を変更してください。

rename 's/456/555/g' *456*

答え2

ファイルをに渡すのを忘れたようですrename

rename 456 555 *456*

答え3

which -a rename

$ PATHに名前変更ツールがあるかどうかを伝えます。

rename 's/456/555/g' *

必要なものを実行するのに好ましい構文です(例:手動)。正規表現の名前変更の以前のバージョンがないか、以前のバージョンの場合ダウンロード公式) prename これはperlDebian や他のシステムで使われるスクリプトです。

答え4

(から移動しました質問ここへの回答として使用されます)

私の質問に対する答えを見つけました。

#! /bin/csh -f
#----------------------------------------------------------------------
#  Script Name: moveme                          Date:   05/07/96
#  Written by:  John W. Woolsey                 Rev:    10/11/99
#
#  Description:
#    Renames a set of files that contain a particular search string
#    to file names that contain a replacement string.
#
#  Syntax:  moveme <search_string> <replace_string>
#
#  Where:
#     <search_string> is the name of the file name search string.
#     <replace_string> is the name of the file name replace string.
#----------------------------------------------------------------------
#
onintr catch
if ($#argv != 2) goto syntax

ls -d *$1* | sed "s/\(.*\)\$1\(.*\)/mv & \1$2\2/" | sh
exit 0

syntax:
echo "Syntax:  `basename $0` <search_string> <replace_string>"
exit 1

catch:
echo "`basename $0` was interrupted or terminated abnormally."
exit 1

関連情報