web-dev-qa-db-ja.com

サブフォルダー内のすべての.txtファイルの名前を「find」に変更します

フォルダー内のすべての.txtファイルの名前を変更したい。この名前変更は、私のためにすべての.txtの名前を変更します:

rename 's/\.txt//g' *.txt -v

しかし、すべてのサブフォルダの名前を変更したいときは

find ./ -type d -execdir rename 's/\.txt//g' *.txt -v ";"

それは私を示しています:

Can't rename *.txt *: No such file or directory
Can't rename *.txt *: No such file or directory
...

また、find ./ -type -dは、現在およびすべてのサブフォルダーを正しく表示します。

No such file or directoryメッセージがあるのはなぜですか?

3
ICE

find-exec構文を正しく使用し、'{}'を使用して、見つかったファイルを表す必要があります。

find ./ -type d -name '*.txt' -execdir rename -n 's/\.txt//g' '{}' \;

テストしたら、renameの後に-nを削除します。

(通常のファイル名ではなくディレクトリ名を本当に変更したい場合-その場合、-type fの代わりにtype -dを使用します)

6
Zanna