すべてのピリオドをハイフンに再帰的に置き換えます。

すべてのピリオドをハイフンに再帰的に置き換えます。

すべてのサブディレクトリのすべてのファイル/フォルダ内のすべてのスペースをハイフンに置き換えるには、次のコマンドを実行します。

find /path/to/folder -depth -name "* *" -execdir rename 's/ /-/g' "{}" \;

効果がある

すべてのサブディレクトリのすべてのファイル/フォルダで、すべてのピリオド(拡張子を除く)をハイフンに置き換えるには、次のコマンドを実行します。

find /path/to/folder -depth -name "*.*" -execdir rename 's/./-/g' "{}" \;

しかし、これはうまくいきません。代わりに、ファイル名を ---------- の長いリストに変更します。

私は何が間違っていましたか?

ベストアンサー1

ピリオドは正規表現で特別で、すべての文字と一致します。文字通りピリオドを一致させるには、バックスラッシュを使用します。

rename 's/\./-/g'

GNUを含む-execdirいくつかのfind実装では、find各名前はピリオドで始まります。ピリオドをスキップするには、次を使用します。

's/(?<=.)\./-/g'

(?<=.)過去志向の主張期間の前に何かがあることを確認しますが、交換しません。

一部のPerlrenameバリアントは、コードがファイルのデフォルト名でのみ機能するようにするオプションもサポートしているため、-d標準-execdir以外の1も必要ありません。

find /path/to/folder -depth -name '* *' -exec rename -d 's/\./-/g' {} +

最後のポイントを維持するには、次のものを使用できます。プレビューの主張どこかに点が付いている点だけを置き換えます。

's/(?<=.)\.(?=.*\.)/-/g'

1これは、1つだけを呼び出す+代わりにを使用して複数のファイルを処理できることを意味します。一部の実装ではこれをサポートしていますが、名前にファイルを含む各ディレクトリに対して少なくとも1回は実行する必要があります。;renamefind+-execdirrename-

おすすめ記事