いくつかの名前変更コマンドでfindコマンドを使用したいと思います。私は何をすべきですか?
find
これはコマンドで実行したいシーケンスです。
rename "s/ /-/g" * ; rename 'y/A-Z/a-z/' * ; rename 's/[.]-/-/g' * ; rename 's/--/-/g' *
答え1
rename
ここで一人である必要はありません。名前が変更された最初のコードは、ファイルパス(に保存されているように)に必要な変更を実行する任意のコードでありargument
、そのうちの1つを使用する必要はありません。perl
$_
s/pattern/replacement/flags
ここでは、次のことができます。
find . -depth -exec rename -n -d '
$_ = lc $_; # lowercase
s/[ .-]*[ -]+/-/g' {} +
またはrename
サポートしていない場合-d
:
find . -depth -mindepth 1 -exec rename -n '
my ($dirname, $basename) = m{(.*)/(.*)}s;
$basename = lc $basename; # lowercase
$basename =~ s/[ .-]*[ -]+/-/g;
$_ = "$dirname/$basename"' {} +
<0-or-more-spaces-or-dot-or-dash><1-or-more-spaces-or-dash>
これにより、すべてがダッシュに変わりますが、sで区切ってs/.../.../
すべてのsを実行できます;
。
find . -depth -exec rename -n -d '
s/ /-/g;
y/A-Z/a-z/;
s/[.]-/-/g;
s/--/-/g' {} +
-d
それにもかかわらず、交換がデフォルト名にのみ適用され(同様)、リーフの名前がその四半期より前に変更されるか(同様-depth
)確認しようとしています。
(-n
上記は試運転用です。)