検索と名前変更を使用して複数のファイルの名前を変更する方法

検索と名前変更を使用して複数のファイルの名前を変更する方法

すべてのファイルから.hsをインポートしたいと思います。このコマンドが正しく機能しないのはなぜですか?同じ名前のファイルが残ります。

find . -type f -exec rename .hs ' ' * \;

答え1

変える:

find . -type f -exec rename .hs ' ' * \;

そして:

find . -type f -exec rename .hs '' {} \;

コマンドで-execファイル名を指定する場所は、でマークする必要があります{}

.hsまた、空白に置き換える代わりに削除したいようで、一重引用符の間のスペースを削除しました。

文書

man findこのオプションの説明を含めてください-exec

- 注文を実行する。
コマンドを実行します。状態 0 が返されると true です。 findの次の引数は、次の引数が;見つかるまでコマンドの引数として扱われます。この文字列は、{} コマンド引数に表示される現在処理中のファイルの名前に置き換えられます。、findの一部のバージョンと同様に、単独で使用する引数だけではありません。\シェル拡張から保護するために、両方の設定をエスケープまたは引用する必要があるかもしれません。 -exec オプションの使用例については、「例」セクションを参照してください。一致するファイルごとに指定されたコマンドが一度実行されます。このコマンドは起動ディレクトリで実行されます。 -execジョブを使用すると回避できないセキュリティ上の問題があるため、この-execdir オプションを使用する必要があります。 [強調する。 ]

答え2

使用Shell(Ksh、Bash、ksh93、mksh、zsh)モードの交換拡張 ${var/Pattern/Replacement}(最初のゲーム模様、以内に変わりやすい次に交換代替。または${var//Pattern/Replacement};グローバル交換。すべてのゲーム模様、以内に変わりやすい次に交換代替。もし代替省略されてから一致します。模様に置き換えられます何もないつまり削除です。 )

find . -type f -exec bash -c 'echo mv "$1" "${1/.sh/}"' _ {} \;

PS、echoファイル名を変更するには削除してください。

関連情報