このファイル名を変更したいと思います。
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つのオプションは、次のものを使用することですprename
(rename
ほとんどのシステムではこれへのリンクですが、すべてではありません)。
prename -n 's/download$/html/' -- *.download
-n
これが要件を満たしていると確信している場合は、削除してください。別の方法は、単にループを使用することです。
for file in *.download; do
mv -i -- "$file" "${file%download}html"
done
-i
mv
ファイルを上書きするかどうかを尋ねるメッセージを表示するには、このオプションを追加します。必要なファイルを上書きしないことが確実な場合は、そのファイルを削除してください。
答え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
シェルはファイル名の一部としてアスタリスクを保持します。すべてのダウンロードを同じ名前のファイルに移動しようとしています*.html
。mv
ディレクトリではないことを警告します(そうしないと、このファイルが何度も上書きされ、最後にダウンロードした*.html
ファイルが含まれます)。 1つ以上のファイルが実際に見つかると、*.html
シェルはそのファイルをファイルのリストに展開します。どちらもディレクトリではないことを望むので、同じ理由で再び失敗します。
運が良ければ、このようにデータが失われる可能性があります。