ファイル名からハイフンを削除するための小さなBashスクリプトを作成しようとしています。例えば、私は名前を変更する:Bashでファイル名からハイフンを削除する
CropDamageVO041412.mpg
私はバッシュに新たなんだ
CropDamageVO041412.mpg
に、とても穏やかな:]任意の助けてくれてありがとう
ファイル名からハイフンを削除するための小さなBashスクリプトを作成しようとしています。例えば、私は名前を変更する:Bashでファイル名からハイフンを削除する
CropDamageVO041412.mpg
私はバッシュに新たなんだ
CropDamageVO041412.mpg
に、とても穏やかな:]任意の助けてくれてありがとう
FN=CropDamageVO-041412.mpg
mv $FN `echo $FN | sed -e 's/-//g'`
バッククォート( ``)は、その中でコマンドを実行し、そのコマンドの出力を式で使用するように指示します。 sedパートは正規表現を適用してファイル名からハイフンを削除します。
for i in *VO-*.mpg
do
mv $i `echo $i | sed -e 's/-//g'`
done
f=CropDamageVO-041412.mpg
echo ${f/-/}
または、もちろん、
mv $f ${f/-/}
はこのお試しください:
for file in $(find dirWithDashedFiles -type f -iname '*-*'); do
mv $file ${file//-/}
done
を特定のパターンにマッチする現在のディレクトリ内のすべてのファイルにこれを行うには
か
これは、あなたのディレクトリ名前にダッシュはありません。それはこれを破るだろう。
${varname//regex/replacementText}
構文はhereと説明されています。部分文字列置換を検索するだけです。
また、ディレクトリまたはファイル名にスペースが含まれていると、これが破損します。私が言ったように、それはもう少しだ、
for file in *-*; do
mv $file "${file//-/}"
done
これは、変更したいファイルを含むすべてのディレクトリで実行されるようになるという欠点を持っていますが、:あなたは、ファイル名にスペースがある場合は、これを使用する必要がありますロバスト。
私が決して覚えることのできない$ {//}構文のための+1 – jimw
ファイル名にスペースがある場合は、$ fileを二重引用符で囲む必要があります(例えば、 'mv" $ file "" $ {file// - /} "') –
@GordonDavisson良いキャッチ。私の答えを更新しました。 –
これは、一般的なPosixシェルとの互換性の利点があります。もし私がbash kool-aidの*すべて*を飲むべきかどうかは決してわかりません。 – DigitalRoss
これは、私がめったにアンティークシェルを使用していない時でさえ、私が実際にそれらを使用していない程度に、派手なbash-ismsを避ける習慣になったのです。 SolarisとAIXには多くの回答があります。 – jimw
うわー、それはすばやい返信でした。私は、[NAME] VO- [DATE] .mpg – idoperceive