ファイルディレクトリがあります。
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}
(たとえば)値に展開し、プレフィックスを削除して値を生成します。f
image01.png
image
01.png
拡張子と部分word
は、ファイル名と同じワイルドカード拡張子を持ちます。したがって、スペースと削除するには(を使用してすべての文字と空の文字列を置き換えることができます。replacement
${...}
-
${f//[ -]/}
-
マンページのすべての詳細。
答え2
Perlがある場合rename
(たとえば、DebianやUbuntuを使用しているため)、これはこの特定の猫をスキンする最も簡単な方法です(別の猫と同様に、大規模な名前変更やサイトアーカイブ検索のための多くのツールがあります)。根すべての主要項目を見つける必要があります。)
rename 's/[- ]//g' *.xml
つまり、最も重要なシェルプログラミングの原則によれば、スクリプトは機能します。すべての変数置換は二重引用符で囲む必要があります。。 (このような追加の構文エラーが必要なのはなぜですか?場合によっては、実際には引用されていない動作が必要なためですが、これらのケースは非常にまれです。)
for f in *.xml; do mv "$f" "${f//[ -]/}"; done
zshを使用すると、ループを作成する必要はありません。便利なzmv
機能が利用可能です。
autoload zmv
zmv '(*.xml)' '${1//[- ]/}'
答え3
sed を使用して新しい名前を作成することもできます。あります
for i in *.xml; do mv "$i" `echo "$i" | sed -e "s/[ -]//g"`; done