
すべてのファイルから.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
ファイル名を変更するには削除してください。