複数のファイルの拡張子を変更してみてください

複数のファイルの拡張子を変更してみてください

コマンドライン(Fedora)を使用して、現在のディレクトリの拡張子が「foo」であるすべてのファイルの名前を同じ名前に変更したいのですが、拡張子はfoo1です。

StackExchangeで見つけたいくつかの例を試しました。

rename foo foo1 *.foo

そして

find . -name '*.foo' -execdir rename 's/\.foo$/.foo1/' \{} \;

どちらも次のエラーを複数回生成します。

rename: not enough arguments

どんなアイデアにも感謝します。

答え1

あなたの使用はrenameどこでも機能しないかもしれません。これを達成するもう1つの方法は、いくつかのbash置換を使用することfindですmv

find . -name '*.foo' -exec bash -c 'mv "$0" "${0%.foo}.foo1"' "{}" \;

参考にするいくつかの点があります。

私はそれを使用しましたが、うまく-execいきませんでした-execdir。後者は、cd一致するファイルのディレクトリを効果的に指します(ファイルへのパス(相対パス.)がもはや正しくないため、望むものではありません)。あなたが望むのは、一致するファイルごとに-exec与えられたコマンド-name '*.foo'{}一致するファイルのパスに置き換えられます)を実行することです。

"${0%.foo}"拡張子を削除すると.fooなります。その後、最後に追加すると追加されます。$0"hello.foo""${0%.foo}""hello".foo1"${0%.foo}.foo1""hello.foo1"

答え2

forループを使う

for f in *.foo
do
    mv $f ${f/.foo/.foo1}
done

答え3

1名前が最初に次に終わるすべてのファイルの名前にaを追加します.foo

find . -type f -name '*.foo' -exec mv -i {} {}1 ';'

関連情報