パターンを使用したファイルグループの名前変更.1.gz.html~.html

パターンを使用したファイルグループの名前変更.1.gz.html~.html

私はコマンドを使ってみました:

mv *.1.gz.html *.html

しかし、私は次のような答えを受けました。

<filename>はディレクトリではありません。

どのように動作させることができますか?また、 rename コマンドを試しましたが、機能しませんでした。私には正規表現が多すぎます。

私がよりよく理解したら、xargsを使用することがうまくいくと思います。

答え1

mv単一のファイルの名前を変更するか、複数のファイルを単一のディレクトリに移動します。

多くのファイルの名前を変更するにはrename

バージョンに応じてrename

 rename .1.gz.html .html *.1.gz.html

または

 rename 's/\.1\.gz\.html/\.html/' *.1.gz.html

最初のバージョンは書くのがより簡単で、2番目のバージョンはより強力で、時には正しい構文を見つけるためにperl-renameman rename

答え2

このようなワイルドカードは、一致するすべての項目に展開されます。今後コマンドmvも実行されます。さらに悪いことは、ファイルとも*.html一致することです。*.1.gz.html

これは(たとえば、abc.1.gz.htmlという名前の2つのファイルdef.1.gz.html)、上記のコマンドがデフォルトで実行されていることを意味します。

mv abc.1.gz.html def.1.gz.html abc.1.gz.html def.1.gz.html

その後、およびを名前のディレクトリabc.1.gz.htmlに移動しようとします。幸い、ファイルがディレクトリではないため、この操作は失敗します。def.1.gz.htmldef.1.gz.html

各ファイルを一度に表示するには、いくつかのスクリプトを作成する必要があります。たとえば、次のようになります。

for file in *.1.gz.html; do
  mv "$file" "`echo $file | sed 's/\.gz\.html$/.html/'`"
done

関連情報