質問

ディレクトリでは、私を信じてチーム *.html ファイルです。私の名前を変更してき *.txt

する方法を教えてください。使っているbashシェルです。

役に立ちましたか?

解決

のためのより良いソリューション(みbashの機能と外部への通話)、 その他の回答.


以下のいを必要としないシステムの rename プログラムが使うことの多いこのシステム):

for file in *.html; do
    mv "$file" "$(basename "$file" .html).txt"
done

編集: 指摘されているように、コメントませんが、これは動作しませんのためのファイル名を半角スペースにおいて適切な引用(追加されます。作業する場合などは、純粋に自分のファイルをご存知ないスペースのファイル名がこの仕事でも書きるものを再利用可後、せつ適切な引用.

他のヒント

bashを使用する場合、sed、basename、rename、exprなどの外部コマンドは不要です

for file in *.html
do
  mv "$file" "${file%.html}.txt"
done
rename 's/\.html$/\.txt/' *.html

望みどおりに動作します。

これは、.txtから.txt_bakまでのOSXで機能しました

find . -name '*.txt' -exec sh -c 'mv "<*>" "${0%.txt}.txt_bak"' {} \;

rename を使用する場合:

rename -S .html .txt *.html

これはまさにあなたが望むことをします- *。html に一致するすべてのファイルの拡張子を .html から .txt に変更します。

注:Greg Hewgillは、これがbashビルトインではないことを正しく指摘しています。また、別個のLinuxコマンドです。 Linuxで何かが必要な場合は、これで十分です。よりクロスプラットフォームなものが必要な場合は、他の答えをご覧ください。

Macの場合...

  1. 名前を変更していない場合: brew install rename
  2. rename -S .html .txt * .html

Ubuntuユーザーの場合:

rename 's/\.html$/\.txt/' *.html

名前変更コマンドの例を次に示します。

rename -n ’s/\.htm$/\.html/’ *.htm

-nは、テスト実行であり、実際にファイルを変更しないことを意味します。 -nを削除すると名前が変更されるファイルのリストが表示されます。上記の場合、現在のディレクトリ内のすべてのファイルを.htmのファイル拡張子から.htmlに変換します。

上記のテスト実行の出力に問題がなければ、最終バージョンを実行できます:

rename -v ’s/\.htm$/\.html/’ *.htm

-vはオプションですが、以下の出力例に示すように、名前変更コマンドによって行われた変更の唯一のレコードであるため、含めることをお勧めします。

$ rename -v 's/\.htm$/\.html/' *.htm
3.htm renamed as 3.html
4.htm renamed as 4.html
5.htm renamed as 5.html

真ん中のトリッキーな部分は、以下で強調表示されている正規表現によるPerlの置換です。

<*>

他の人のWebサイトがクロールした後、サブディレクトリの幅広いツリーにわたって、.html拡張子が欠落している数千のファイルになりました。

すでに.html拡張子が付いているファイル(ほとんどがまったくないファイル)を除いて、すべての名前を一度に変更するには、これでうまくいきました:

cd wwwroot
find . -xtype f \! -iname *.html   -exec mv -iv "{}"  "{}.html"  \;  # batch rename files to append .html suffix IF MISSING

OPの場合、*。txtファイルの名前のみを変更するように、わずかに変更する場合があります。

find . -xtype f  -iname *.txt   -exec filename="{}"  mv -iv ${filename%.*}.{txt,html}  \; 

壊れた(ハンマータイム!):

-iname * .txt
  -既に.txtで終わっているファイルのみを考慮する手段

mv -iv&quot; {}。{txt、html}&quot;   - find がファイル名として{}を渡すと、$ {filename%。*}は拡張子なしでベース名を抽出し、 mv へのパラメーターを形成します。 bash は{txt、html}を2つのパラメーターとして書き換えるため、最終コマンドが次のように実行されるようにします。 mv -iv&quot; filename.txt&quot; &quot; filename.html&quot;

ただし、修正が必要:ファイル名のスペースの処理

この問いを明示的に記載BashのだというZSH可能でのインターネットはモバイル:

zmv '(*).*' '$1.txt'

に取得する場合 zsh: command not found: zmv それだけ実行します:

autoload -U zmv

して、再度入力してください。

この 原著論文 のための先端につzmv.

これは、私が見つけた最も滑らかなソリューションであり、OSXおよびLinuxで動作し、gitでもうまく動作します!

find。 -name&quot; *。js&quot; -exec bash -c 'mv&quot; $ 1&quot; &quot; $ {1%.js}&quot; .tsx '-' {} '\;

およびgitを使用:

find。 -name&quot; *。js&quot; -exec bash -c 'git mv&quot; $ 1&quot; &quot; $ {1%.js}&quot; .tsx '-' {} '\;

コマンド mmv は、このタスクを非常に効率的に実行するようです。膨大な数のファイル(1秒間に数万)。たとえば、すべての .xml ファイルの名前を .html ファイルに変更するには、次を使用します:

mmv ";*.xml" "#1#2.html"

; はパスと一致し、 * はファイル名と一致し、これらは#1 およびと呼ばれます置換名の#2

exec またはパイプに基づく回答は、非常に多くのファイルで遅すぎるか失敗しました。

これを試してください

rename .html .txt *.html 

使用法:

rename [find] [replace_with] [criteria]

パーティーに少し遅れました。あなたはxargsでそれを行うことができます:

ls *.html | xargs -I {} sh -c 'mv $1 `basename $1 .html`.txt' - {}

またはすべてのファイルがいくつかのフォルダーにある場合

ls folder/*.html | xargs -I {} sh -c 'mv $1 folder/`basename $1 .html`.txt' - {}

PERLを好む場合は、PERLの作成者であるLarry Wallによって書かれた短いPERLスクリプトがあります。 tips.webdesign10.com/files/rename.pl.txt 。 あなたの例では、次のトリックが必要です

rename.pl 's / html / txt /' * .html

=)

(更新されたURLについて@loretoparisiに感謝)

残念ながら、移植性のあることは簡単ではありません。おそらくちょっとしたexprマジックが必要でしょう。

for file in *.html; do echo mv -- "$file" "$(expr "$file" : '\(.*\)\.html').txt"; done

希望どおりに動作したら、エコーを削除します。

編集: expname は一般により柔軟ですが、この特定のケースでは basename がおそらく少し読みやすくなります。

これは、複数の拡張機能を一度に変更するのに適した方法です。

for fname in *.{mp4,avi}
do
   mv -v "$fname" "${fname%.???}.mkv"
done

注:拡張サイズが同じになるように注意してください(???)

いい&amp;シンプル!

find . -iname *.html  -exec mv {} "$(basename {} .html).text"  \;

これは .edge ファイルの名前を .blade.php

に変更するために使用したものです
for file in *.edge; do     mv "$file" "$(basename "$file" .edge).blade.php"; done

チャームのように動作します。

1行、ループなし: ls -1 | xargs -L 1 -I {} bash -c 'mv $ 1&quot; $ {1%。*}。txt&quot;' _ {}

cbongiorno@ip-172-31-26-242:~/pgsql$ ls
60acbc4d-3a75-4090-85ad-b7d027df8145.json  ac8453e2-0d82-4d43-b80e-205edb754700.json
cbongiorno@ip-172-31-26-242:~/pgsql$ ls -1 | xargs -L 1 -I {} bash -c 'mv $1 "${1%.*}.txt"' _ {}
cbongiorno@ip-172-31-26-242:~/pgsql$ ls
60acbc4d-3a75-4090-85ad-b7d027df8145.txt  ac8453e2-0d82-4d43-b80e-205edb754700.txt
cbongiorno@ip-172-31-26-242:~/pgsql$ 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top