**rename** コマンドを使用せずにファイル名を変更する

**rename** コマンドを使用せずにファイル名を変更する

ファイルディレクトリがあります。

Measurements Panama 2009-03-22 Session1.xml
Measurements Panama 2009-03-22 Session2.xml
Measurements Panama 2009-03-22 Session3.xml
Measurements Panama 2009-03-22 Session4.xml
...
Measurements Panama 2009-03-22 Session10.xml

スペースとダッシュ文字を削除したいです-。使いたくない名前を変更するPerlや正規表現がわからないので、コマンドを使用します。ファイル名の一部を削除するための別の記事の提案は次のとおりです。

for f in *.png; do mv $f ${f#image}; done

よさそうだねその文字が何をしているのかわかりません#(ファイル名から「image」という文字列を削除するとしますか?)。とにかく空白とダッシュを削除するにはどうすればよいですか?

そのファイルがディレクトリではないと実行すると、エラーが発生します。

[jings]s0128943: for f in *.xml; do mv $f ${f//[ -]/};done

mv: target `MeasurementsPanama20090322Session10.xml' is not a directory

mv: target `MeasurementsPanama20090322Session1.xml' is not a directory

すべてのファイルを待ちます。

ベストアンサー1

シェルのマニュアルページで${...}代替情報を見つけることができます。大きな打撃(1)。最も一般的な:

  • ${var#word}var最短のプレフィックスを削除する:wordプレフィックスを含む変数値(存在する場合)を削除します。

  • ${var%word}var最短のサフィックスを削除:サフィックスの変数値word(存在する場合)を削除します。

  • ${var/pattern/replacement}最初のパターンを削除

  • ${var//pattern/replacment}パターン内のすべての項目を削除します。

したがって、あなたの例では${f#image}(たとえば)値に展開し、プレフィックスを削除して値を生成します。fimage01.pngimage01.png

拡張子と部分wordは、ファイル名と同じワイルドカード拡張子を持ちます。したがって、スペースと削除するには(を使用してすべての文字と空の文字列を置き換えることができます。replacement${...}-${f//[ -]/}-

マンページのすべての詳細。

おすすめ記事