1

SVN ユーザーは、次のような特定のタグ名を持つファイルをアップロードしています。

filename_INT filename2_INT filename3_INT

_INT を元のファイル名のように削除して、これらのファイルの名前を変更するスクリプトが必要です

filename filename2 filename3

bashでこれを行う最良の方法は何ですか?

sed を使用してみましたが、スクリプトでは失敗しますが、コマンド ラインでは失敗し、

[root@hostname tags]# echo filename_INT | sed 's/_INT[a-z.]*//g'

filename.php

4

4 に答える 4

1

これは Subversion リポジトリで行う必要がありますか、それともローカルで行う必要がありますか?

ローカルだけの場合は、findすべてのファイルを見つけるために使用できます。

find . -name "*_INT"

ファイルの名前に空白が含まれていますか? そうでない場合は、次のように動作するはずです。

find . -name "*_INT" | while read file
do
    mv $file ${file%_INT}
done

は、 Pattern Matching Operators${file%_INT}と呼ばれる bash/kornshell メカニズムを使用します。これらは、ファイル名から接頭辞と接尾辞をすばやく除外できます。たとえば、次の場合:

$ file=foo.txt_INT
$ echo $file         #Prints "foo.txt_INT"
$ echo ${file%_INT}  #Prints "foo.txt"
$ echo ${file#foo}   #Prints ".txt_INT"

mvファイルの古い名前と新しい名前がわかったので、コマンドを使用するだけです。もちろん、その名前のファイルが既に存在する可能性があります。上書きしても大丈夫ですか?そうでない場合は、それを処理する方法を理解する必要があります。

find . -name "*_INT" | while read file
do
    if [ ! -e $file ]
    then
        mv $file ${file%_INT}
    else
        echo "File ${file%_INT} already exists"
    fi
done
于 2013-06-03T18:52:01.473 に答える