3

さまざまなランダムなファイル拡張子を含むファイルのフォルダーと、拡張子をまったく含まないファイルのフォルダーがあります。ファイル名から拡張子を取り除きたい。私は長く曲がりくねった道を進んでいるかもしれないと感じていますが、オンザフライで実行できないため、2 つのリストと move コマンドの使用は避けたかったのです。

私が使用しているコードは、拡張子を保持する変数を作成し、sed 構文を使用して名前変更コマンドを呼び出して、ファイルから変数を削除しようとしています。

for i in `ls`; do 
        blah=$(echo $i |awk -F . '{if (NF>1) {print $NF}}')
        echo \.$blah
        rename 's/\.$blah//' $i  

done 

私が得ているエラーは次のとおりです。グローバルシンボル "$blah" requires explicit package name at (eval 1) line 1

この時点で、前後の列を含む csv を作成し、それを使用してファイル名を削除しますが、今後の参考のために、これを達成する方法を知りたいと思います。

1 つまたはいくつかの拡張機能の名前変更の使用に関する投稿がたくさんあります。

rename 's/.mp3//' *.mp3

しかし、さまざまな拡張機能の数のために...

4

3 に答える 3

5

bashのコマンドでジョブを実行する必要があります。

for f in *.*; do mv "$f" "${f%.*}"; done
于 2013-05-22T11:36:11.890 に答える
4

renameあなたのシステムでは Perl で実装されており、それがエラーの原因です。一重引用符を使用しました。これは、変数が展開されなかったことを意味し、Perl は変数 $blah の定義を見つけられませんでした。

また、for i in `ls`ファイル名にスペースが含まれていると間違っている可能性があります。次のように、ワイルドカードを使用することをお勧めします。

for i in *.*

good.mp3と のように、拡張子のない名前が同じファイルに対して何をしたいですgood.jpgか? そのうちの 1 つを上書きしますか?

拡張子を持つすべてのファイルで使用するrenameには、試すことができます

rename 's/\..*//' *.*

前述のように、一部のファイルは引き続き上書きされます。また、 のような名前のファイルは名前が onlya.b.c.dに変更されaます。

于 2013-05-22T11:37:46.757 に答える