本当に台無しですね。 Perlが名前を変更するためにsedに似た構文を使用すると予想すると、さまざまな実装があり、ほとんどの場合、Perlの異なるバージョン(バイナリ)があるs///
ときにどのコマンドを使用する必要があるかをどのように知ることができますか?rename
rename.ul
答え1
真珠rename
ファイル名を一括変更する最もよく知られていて最も直感的なツールはPerlですrename
。これはステロイドと非常によく似ていますsed
(ファイル名を変更するため)。
長い話を短く
期待どおりに使用するには、PerlのCPANを使用して予想バージョンをインストールするのが最善です。本当にたくさんのバージョンがあります。
以下の「一般 Perl CPAN のインストール」を参照してください。
使い方(sed
s///
例)
強力な正規表現処理が可能です。
rename [options] 's/<regex>/<replacement>/[modifiers]' <FILE(S)>[*]
<STDIN> | rename [options] 's/<regex>/<replacement>/[modifiers]'
はい
TitleCase
mp4ファイル名の各単語の間にスペースを追加するには(PascalCase
到着スペースで区切られた単語):rename -n 's/\B[[:upper:]]/ $&/g' ./*.mp4 rename(./FooBarBaz.mp4, ./Foo Bar Baz.mp4)
試みが満足な場合は、
-n
スイッチを取り外してください。dry-run
実際の名前に変更。ゼロパディングに修飾子を使用する
replacement
のと同じように、そのセクションに呼び出しを挿入することもできます。sprintf "%03d", 7
e
$ touch {1..3}.txt $ rename -n 's/(\d+)\.txt/sprintf "%03d", $1/e' ./*.txt rename(1.txt, 001.txt) rename(2.txt, 002.txt) rename(3.txt, 003.txt)
-
区切り文字の逆順を使用してキャプチャグループ:$ rename -n 's/(\w+)-(\w+)-(\w+)/$3-$2-$1/' ./foo-bar-base.txt rename(foo-bar-base.txt, base-bar-foo.txt)
または、
Perl
このようなものを使用してください(TMTOWTDI):$ rename -n 's/(\w+)-(\w+)-(\w+) # capture groups /join "-", reverse @{^CAPTURE}/xe' foo-bar-base.txt rename(foo-bar-base.txt, base-bar-foo.txt)
Perlを習得するのに時間を費やす価値があります。しかし、 rename コマンドの時間節約機能の使用を開始するには、機能、単純さ、および時間の点で大きな利点を得るために Perl についてあまり知る必要はありません。
自分のバージョンを確認してください
同じ名前の別のバイナリツールもいくつかのディストリビューションで使用されます。ディストリビューションに応じて、Perlのバージョンはperl-rename
、、、、file-rename
prename
pname
またはrename
。
まだ一つあります。Pythonrename
車長がそこにいます!
rename --version
次のようにする必要があります。
/usr/bin/rename using File::Rename version 1.30, File::Rename::Options version 1.10
または以前のバージョンの場合:
Unknown option: help
Usage: rename [-v] [-n] [-f] perlexpr [filenames
または
rename 2>&1 | grep -i perl
[ -e|-E perlexpr]*|perlexpr [ files ]
何かを使う代わりに rename
~からutil-linux
名前変更コマンドの基本バージョンとリリーステーブル
次から借りるtldr-pagesのGitHub問題トラッカーについての@mebeimのコメント:
真珠(旧) パール(新規) パール(他?) 氏 Linux(Debian) 名前(pkg perl)、廃止 ファイル名の変更(パッケージ名の変更) 該当なし rename.ul(pkg util-linux) Linux(Ubuntu) 該当なし ファイル名の変更(パッケージ名の変更) 該当なし rename.ul(pkg util-linux) Linux(アーキテクチャ) 該当なし 該当なし Perlの名前を変更する(pkg Perlの名前を変更する) 名前変更 (pkg util-linux) Linux(CentOS、RHEL) 該当なし 該当なし 該当なし 名前変更 (pkg util-linux) Linux(Fedora) 該当なし 該当なし 名前(パッケージ名) 名前変更 (pkg util-linux) Linux(オープンスーツ) 該当なし 該当なし 該当なし 名前変更 (pkg util-linux) macOS(手作り) 該当なし 該当なし 名前変更(パッケージ名の変更) 名前変更 (pkg util-linux) Windows 該当なし 該当なし 該当なし 該当なし ソラリス 該当なし 該当なし 該当なし 該当なし
重要事項:
Windowsでは
rename
まったく異なるコマンドですが(上には記載されていません)、これも機能します。確認してください。WindowsでPerlの名前変更を使用する方法Solaris では
rename
コマンドは存在しません。macOSのHomebrewパッケージ
rename
とutil-linux
クラッシュmacOSでは、Homebrewパッケージは
rename
他のスクリプトとは異なって見えるPerlスクリプトを提供します。Arch Linuxでは、この
perl-rename
パッケージは他のスクリプトとは異なるPerlスクリプトを提供します。Ferodaでは、
prename
他のスクリプトとは異なるPerlスクリプトが提供されています。Debianの代替品です
prename
。file-rename
rename
Ubuntuでは
file-rename
唯一のオプションですrename
ムケシ
rename
Perlのを使用するには、フルパスを使用するか、rename
を/usr/bin/rename
定義する必要があります。alias rename=/usr/bin/rename
CPAN
root権限を持っていたり持たないUniversal Perlをインストールする
さまざまなバージョンがあるので、このアプローチをお勧めします。これにより、どのバージョンがあるかを正確に知ることができます。
- 使用
cpan -i File::Rename
(より良い使用パールブルーイング一般ユーザーの場合)。コマンドrename
を使用できます。それ以外の場合は、PATH
Perlスクリプトユーティリティが含まれていません。 - for 、 Debian パッケージの作成
Debian*
に使用されるdh-make-perl --build --cpan File::Rename
何もインストールできない場合は、ダウンロードスタンドアロンスクリプト(依存関係(除外)がなく、perl
新しいバージョンよりもスイッチ数が少ない単純化された古いバージョン)
VSディストリビューションのマッピングrename
(良いディストリビューションでない場合)
システムパッケージマネージャを好む場合:
rename
これは、Debian(代替)オペレーティングシステム(Arch Linuxrpm
ベースのディストリビューション、Slackware、および* BSDとは異なります)の基本的なコマンドです。
rpm
展開基準:dnf install prename
Arch Linux/Manjaro:
pacman -S perl-rename
ルート図:
emerge dev-perl/rename
ニックス:
nix-env -i perl5.36.0-rename nix-env -iA nixos.perlRename
これは推奨される方法ではありません純粋主義者のためのものです。
*BSD:
pkg install p5-File-Rename
Alpine Linux(リポジトリ
edge
のフォークにあり、testing
デフォルトでは使用されていません):apk add perl-file-rename --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing/
アップルシステム:
brew install rename
Debian/Ubuntuに類似:
apt install rename
スラックソフトウェア:
slackbuild
文書
- 確認する名前の変更に関するPerlのドキュメント
- perldoc perle#文字クラスフラグメントを理解するために必ず読む必要があるページ
\d
、\w
\s
...(PCRE、Perl、Python、PHP)
Unicode
特定のUnicoderename
実装もあります。Unicode::Tussle
ファイルに連続したUnicode UTF8文字が含まれている場合、AaaÃééZzz.mp4
Unicode部分は無視されます。 1つの解決策は特別なスイッチを使用することですunicode
。
-u, --unicode [エンコーディング]
ユーザー提供のコードを実行すると、ファイル名はPerl(Unicode)文字列として扱われます。
エンコードがある場合は、エンコードを使用してファイル名をデコード/エンコードします。
エンコーディングはオプションです。省略した場合、次の引数は -e のように "-" で始まるオプションでなければなりません。
または、なしの(以前の)バージョンがある場合は、-u
次のことができます。
PERL_UNICODE=ASD rename -n 's/\B\p{Lu}/ $&/g' ./*.mp4
確認する
perldoc perlrun | less +/PERL_UNICODE
安全
可能性を避けるためにシェル注入(ありがとうございます。ツイートをサイトに埋め込む):
rename -n 's/.*//' '--e=system"uname"#.mp4'
Linux
使用習慣開発:(最も携帯性が良い)
rename -n 's/.*//' ./*
またはサポートされている場合:
rename -n 's/.*//' -- *
どちらも予防できます。シェル注入で始まるファイルを処理します-
。
たとえば、ファイルの名前を変更してみてください。rename -n 's/.*//' -foobar.txt