回答:
たとえばSpring\ 2011
、スペースをエスケープするか、たとえば引用符を使用します'Spring 2011'
。将来的には、* NIXでスペースを含むファイル名を使用することは一般的に悪い考えです。
持っている場合rename
、これを使用できます:
rename ' ' '_' [filenames...]
rename
役に立たない(私はバージョン2.23 があります)
マシンにrenameコマンドがある場合、これは現在の作業ディレクトリ内のすべてのファイル/ディレクトリ内のすべてのスペースをアンダースコアに変更します。
rename 's/ /_/g' *
rename --version
rename from util-linux 2.23.2
ます。
rename
シェルだけを使用していない、または使用したくない場合:
for f in *\ *; do mv "$f" "${f// /_}"; done
分解:
*\ *
名前にスペースを含むすべてのファイルをfor
ループの入力として選択します。 "$f"
ファイル名にスペースが含まれていることがわかっているため、引用符は重要mv
です。 ${f//str/new_str}
bash固有の文字列置換機能です。のすべてのインスタンスがstr
に置き換えられますnew_str
。for f in *\ *; do mv "$f" "${f// /_}"; done
それを使用する場合
プログラムでNファイルの名前を変更するには、単純なbash
forループを使用できます。
#!/bin/bash
set -eux
# find all your files by using a `grep` pattern
pattern="insert_filename_pattern_here" # you must enter your filename pattern here
# create an array of filenames and split on newlines
IFS=$'\n'
tmp=($(ls | grep ${pattern}))
unset IFS
# for each filename
for filename in "${tmp[@]}"; do
# rename the filename to use "_" character instead of a " " character
mv -v "${filename}" "${filename// /_}"
done
ファイル名が5つ未満の場合は、すべてのファイル名を手動で入力しrename
、上記の解決策が示すようなコマンドを使用できます。しかし、私にとっては... 4つのファイルしかない場合でも、プログラムによる解決策を好みます。
PS
Bash
のパラメータ拡張(つまり${filename// /_}
)に慣れていない場合は、rename
次のコマンドを使用できます。
if ((0)); then
mv -v "${filename}" "${filename// /_}"
else
rename ' ' '_' "${filename}"
fi
bash
forループを使用します。こちらのソリューションをご覧ください。