コマンドライン(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 ';'