ファイル名のスペースを下線で置き換える方法

ファイル名のスペースを下線で置き換える方法

だから、スペースがないようにディレクトリ内のすべてのファイル名を変更しようとしました。私はbashスクリプトを作業していますが、何をすべきかわかりません。さまざまな引用とエスケープを試しましたが、どの組み合わせが機能するのかわかりません。

#!/bin/bash
#change empty spaces in filenames to underlineos
lsarray="$(echo "$(pwd)""/*")"
for i in $lsarray
do
    if [[ $i == *" "* ]] 
    then
        line=$(echo $i | sed 's/ \+/\_/g')
        j=$(echo $i | sed 's/ \+/\\ /g')
        mv "$j" "$line"
        echo "$i"
        echo "$j"
        echo "$line"
        fi
done

mvには「特殊変数の拡張」が必要なので、上記では二重引用符を使用しました。どんなアドバイスにも感謝します。

ベストアンサー1

bashすべてのファイルをフォルダに配置します。

for name in *; do mv "$name" "${name// /_}"; done

${name/pattern/replace}patternreplaceBash パラメータ拡張)。パターンが/(ここでパターンは/+)で始まると、Spaceすべての項目が置き換えられます。次に、置き換えられたスペースを使用してmvファイル名を新しい名前に変更しますname

おすすめ記事