回答:
たとえば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ファイルの名前を変更するには、単純なbashforループを使用できます。
#!/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
bashforループを使用します。こちらのソリューションをご覧ください。