ファイル拡張子を*.txt
から*.text
に変更したいと思います。 basename
コマンドを使用してみましたが、複数のファイルを変更できません。
これが私のコードです:
files=`ls -1 *.txt`
for x in $files
do
mv $x "`basename $files .txt`.text"
done
私はこのエラーを受け取ります:
basename: too many arguments Try basename --help' for more information
#すべての* .txtの名前を* .txtのfの* .text に変更します。 do mv-"$ f" "$ {f%.txt} .text" done
また、なぜあなたが _ls
を解析できないのかについてのエントリも参照してください。
編集:basename
を使用する必要がある場合、構文は次のようになります。
* for。* for f; do mv-"$ f" "$(basename-" $ f ".txt).text" 完了
これが、Debianの現在のディレクトリにあるすべてのファイル拡張子を変更する方法です。
rename "s/oldExtension/newExtension/" *.txt
(これはPerlのrename
コマンドであり、util-linux
のコマンドではありません。 Debian/Ubuntuの名前変更ユーティリティが、CentOSなどの他のディストリビューションのものと異なるのはなぜですか? )
シンプルなコマンド rename
from util-linux
、それを行います。「*。txt」に一致するすべてのファイルで「txt」のすべての出現箇所を「text」に置き換えます。
rename txt text *.txt
rename "s/oldExtension/newExtension/" *.txt
上記は正常に動作しますが、現在のディレクトリに限定されます。以下のコマンドを試してみてください。これはサブディレクトリで柔軟です。すべての名前を変更します.txt
ディレクトリ構造の下の新しい拡張子を持つファイル。
find . -name "*.txt" -exec rename 's/.txt$/.newext/' {} \;
s/oldExtension/newExtension/
に関するここでの回答は誤りです。 s/txt/text/
を使用する場合は、footxt.txt
をfootext.txt
に変換することになりますが、これは目的とは異なります。 s/.txt/.text/
を使用しても、footxt.txt
はfo.text.txt
に変換されます。
ピリオドに一致させるには、\.
を使用する必要があります(.
は任意の文字に一致します)。そして、末尾の$
は行末に一致します。これだけが適切に拡張子と一致します。
rename 's/\.txt$/.text/' *.txt
rename 's/\.old$/.new/' *.old
for f in *.txt
do
[ -f "$f" ] && mv "$f" "${f%txt}text"
done
@Prince John Wesleyの回答に基づいて、現在のディレクトリにあるファイルのすべての拡張子をext1
からext2
に変更するための簡単なbashスクリプトを次に示します。名前を変更するファイルの名前も出力します。
#!/bin/bash
for f in *.$1
do
[ -f "$f" ] && mv -v "$f" "${f%$1}$2"
done
使用例(スクリプトの名前がchange-ext
であると想定):
change-ext ext1 ext2
Zshに切り替える理由#53:
zmv '(*).txt' '$1.text'
ファイルがさまざまなディレクトリに分散しているとしましょう。dirxが親ディレクトリであると仮定すると、これはfindを使用してジョブを実行できます。
for f in `find /dirx -iname '*.txt' -type f -print`;do mv "$f" ${f%.txt}.text; done
これは私にとってうまくいきます:
find . -name '*.txt' -exec rename 's/\.txt$/.text/' \{} \;
あなたが
ソースファイルの拡張子がありません
ターゲットの拡張子は。textこのようにします-
for f in *; do mv -- "$f" "${f%.\*}.text"; done
バージョンの問題点を知りたい場合:basenameコマンドで$files
ではなく$x
を使用しました。したがって、これは機能するはずです(ただし、テストされていません)。
for x in *.txt
do
mv "$x" "`basename '$x' .txt`.text"
done