私はコマンドを使ってみました:
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-rename
。man 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.html
def.1.gz.html
各ファイルを一度に表示するには、いくつかのスクリプトを作成する必要があります。たとえば、次のようになります。
for file in *.1.gz.html; do
mv "$file" "`echo $file | sed 's/\.gz\.html$/.html/'`"
done