かつて以下を実行するスクリプトがありました。現在のディレクトリにある複数のファイルのファイル名の一部が変更されます。
たとえば、
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
そしてrename
(prename
):
rename -n 's/456/555/g' *456*
これにより、ファイル名のすべての(g
)456
部分文字列が555
(s/456/555/
)に置き換えられます。
-n
テスト実行が行われ、変更が満足のいくものである場合は、削除して-n
実際の名前を変更してください。
rename 's/456/555/g' *456*
答え2
ファイルをに渡すのを忘れたようですrename
。
rename 456 555 *456*
答え3
答え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