ファイルの品質mvとファイル名の変更

ファイルの品質mvとファイル名の変更

このファイル名を変更したいと思います。

download (19).download
...
download (27).download

到着

download (19).html
...
download (27).html

走りに失敗した

mv *.download *.html
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory

ファイル名を変更するには? 正規表現が必要かもしれないと思います。

答え1

mv呼び出し時に複数のファイルを単一のディレクトリに移動する場合にのみ、この機能を使用できます。ここで1つのオプションは、次のものを使用することですprenamerenameほとんどのシステムではこれへのリンクですが、すべてではありません)。

prename -n 's/download$/html/' -- *.download

-nこれが要件を満たしていると確信している場合は、削除してください。別の方法は、単にループを使用することです。

for file in *.download; do
  mv -i -- "$file" "${file%download}html"
done

-imvファイルを上書きするかどうかを尋ねるメッセージを表示するには、このオプションを追加します。必要なファイルを上書きしないことが確実な場合は、そのファイルを削除してください。

答え2

mvこれはうまくいきません。renameまたはなどの他のツールが必要ですmmv。には2つのバージョンがありますrename

もちろん、シェルは以下を使用してこれを行うことができますmv

for file in *.download; do
  fbasename="${file%.download}"
  if [ -e "${fbasename}.html" ]; then
    echo "${fbasename}.html exists; skipping."
    echo "${fbasename}.html exists; skipping." >>rename.log
    continue
  else
    echo mv -- "$file" "${fbasename}.html"
  fi
done

テスト後に削除してくださいecho

方法mmv:

mmv -n '*.download' '#1.html'

-n実行をブロックして実行する操作を示します。

答え3

rename 's/download$/html/' *.downloadあなたに似合う

答え4

zsh利用可能なシェルがある場合は、必要なものzmvをほぼ正確に実行でき、構文は非常に似ています。

zmv '*.download' '$1.html'

あなたの試みがなぜ間違って危険なのかを指摘するために:ワイルドカード*?はシェルによって拡張されます。今後コマンドも呼び出されます。したがって、mv実際に受信されるのは代わりにファイルの完全なリストですが、どのように*.download動作*.htmlするかは2つあります(どちらも悪い)。

アスタリスクがない場合、*.htmlシェルはファイル名の一部としてアスタリスクを保持します。すべてのダウンロードを同じ名前のファイルに移動しようとしています*.htmlmvディレクトリではないことを警告します(そうしないと、このファイルが何度も上書きされ、最後にダウンロードした*.htmlファイルが含まれます)。 1つ以上のファイルが実際に見つかると、*.htmlシェルはそのファイルをファイルのリストに展開します。どちらもディレクトリではないことを望むので、同じ理由で再び失敗します。

運が良ければ、このようにデータが失われる可能性があります。

関連情報