空の文字列を引数として明示的に渡すことができます。
rename .old '' *.old
サブフォルダーを含む場合、find . -type d -exec rename .old '' {}/*.old \;
. {}
find
で見つかったエントリの代替です 、および \;
-exec
の後に指定されたコマンドの arglist を終了します .
rename
マニュアルページによると:
rename は、最初のを置き換えて、指定されたファイルの名前を変更します の発生...
c.txt.parser.y
のようなファイル名で間違ったことを喜んで行います。 .
find
を使用したソリューションは次のとおりです と bash
:
find -type f -name '*.txt' | while read f; do mv "$f" "${f%.txt}"; done
ファイル名に改行が含まれていると、これが壊れることに注意してください (まれですが、不可能ではありません)。
GNU find がある場合、これはより確実な解決策です:
find -type f -name '*.txt' -print0 | while read -d $'\0' f; do mv "$f" "${f%.txt}"; done
私はこれを使用します:
find ./ -name "*.old" -exec sh -c 'mv $0 `basename "$0" .old`.new' '{}' \;
Perl バージョンの rename では、次のように拡張子を削除できます:
rename 's/\.txt$//' *.txt
サブフォルダも実行するために、これを find と組み合わせることができます。