Linuxでブール「|」を使用する正規表現を使用したシンボリックリンクの名前変更

Linuxでブール「|」を使用する正規表現を使用したシンボリックリンクの名前変更

3つのアイコンがあります。ノート(シンボルリンクではない)、天文学(シンボルリンク)、およびgnome-astronomy(シンボルリンク)です。

ls -l 
astronomy.svg -> celestia.svg
gnome-astronomy.svg -> konquest.svg
notte.svg

これら2つのシンボリックリンクの名前をnotteに変更したいと思います。次のようにする必要があります。

ls -l 
astronomy.svg -> notte.svg
gnome-astronomy.svg -> notte.svg
notte.svg

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

rename -s 'celestia' -- 'notte' *.svg

"|"で正規表現を使用してコマンドを実行したいのですが、動作しません。次のようになります。

rename -s -n 'konquest\|celestia' -- 'notte' *.svg 
rename -s -n 's/konquest\|celestia/notte/g' *.svg 
rename -s -n 's/\(konquest\|celestia\)/notte/g' *.svg 

この場合は、シンボリックリンクがなく、-sファイルがシンボリックリンクでない場合にのみ機能します。

答え1

renameこのパッケージのユーティリティは正規表現と正規表現を理解していませんが、スイッチは理解することが知られていますutil-linuxrename.ul-n-s

以下を使用して、ループ内のシンボリックリンクターゲットの名前を変更できます。

for i in konquest celestia; do
    rename.ul -s "$i" notte *.svg
done

Perlrenameスクリプトは正規表現とを理解します-nが、シンボリックリンクターゲットの名前を変更することはできません。

答え2

rename -s -n 's/konquest|celestia/notte/g' *.svg 

関連情報