私はLinux Slackware 14.0、bash 4.2を使用しています。私のディレクトリに2つのファイルがあるとしましょう。
bash-4.2$ ls
1.txt 2.txt
名前を.svgに変更したいです。この回答それが承認され投票されたので、私はそれがうまくいくと思いました。彼は次のコマンドを使用しました。
find . -name "*.andnav" -exec rename -v 's/\.andnav$/\.tile/i' {} \;
だから同様のコマンドを書いたが、エラーが印刷された。
bash-4.2$ find . -name "*.txt" -exec rename -v 's/\.txt$/\.svg/i' {} \;
rename: not enough arguments
ファイルを印刷したいときに機能します。
bash-4.2$ find . -name "*.txt" -print
./1.txt
./2.txt
わかりました。より簡単な方法で名前を変更できます。
bash-4.2$ rename .txt .svg ./*.txt
bash-4.2$ ls
1.svg 2.svg
しかし、なぜ命令が出ないのですか?それ答えは私に役立ちましたか?
答え1
rename
Linuxディストリビューションでは、2つのコマンドが呼び出されます。持つ基本的なLinuxユーティリティの1つ、使用法は次のとおりです。
rename SUBSTRING REPLACEMENT FILE...
このコマンドは、指定された各ファイルで最初に表示される SUBSTRING を REPLACMENT に置き換えます。一般的な文字列のみをサポートし、ワイルドカードや正規表現はサポートしません。 Debian およびその派生製品 (Ubuntu、Mint など) では、このコマンドを指しますrename.ul
。他のLinuxディストリビューションではそうですrename
。
まだ一つあります。Perlスクリプトの呼び出しrename
使用法は次のとおりです。
rename 'PERL CODE' FILE...
Perlコードの一般的な形式は、rename 's/REGEXP/REPLACEMENT/' FILE...
各ファイル名に最初に表示されるREGEXPをREPLACMENT(すべての項目を変更)に置き換えることですs/REGEXP/REPLACEMENT/g
。
著者はあなたが見る問題彼はUbuntuを実行していることを示したので、彼は受け入れました。この回答rename
Ubuntuでコマンドを使用してください。
標準rename
コマンドに似たコマンドは次のとおりです。
find . -name "*.txt" -exec rename .txt .svg {} \;
bash ≥4のときに使用できます**
ワイルドカードパターン設定後globstar
オプションを使用せずにサブディレクトリのファイルと一致しますfind
。
shopt -s globstar
rename .txt .svg **/*.txt
このrename
コマンドは最初の文字列で機能するため、名前という名前のファイルがある場合はhello.txt.world.txt
名前がに変わりますhello.svg.world.txt
。