findを使用した複数の名前変更コマンドの実行

findを使用した複数の名前変更コマンドの実行

いくつかの名前変更コマンドで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上記は試運転用です。)

関連情報