フォルダー内に多数のファイルがあり、すべてのファイル名のすべてのスペース文字をアンダースコアに置き換えたい。どうすればこれを達成できますか?
フォルダー内に多数のファイルがあり、すべてのファイル名のすべてのスペース文字をアンダースコアに置き換えたい。どうすればこれを達成できますか?
回答:
これはそれを行うはずです:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
for file in *; do mv "$file" $(echo $file | tr ' ' '_') ; done
*
にPATH_TO_YOUR_DIRECTORY
。
Perlスタイルの正規表現を使用するコマンド「rename」を使用することを好みます。
rename "s/ /_/g" *
-nフラグを使用してドライランを実行できます。
rename -n "s/ /_/g" *
rename " " "_" *
rename
OSXでは使用できません。
rename
利用可能です。
shを使用...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
トリガーを引く前にこれを試してみたい場合は、に変更mv
してくださいecho mv
。
bashを使用する場合:
for file in *; do mv "$file" ${file// /_}; done
mv --help' for more information. mv: when moving multiple files, last argument must be a directory Try
。詳細については、mv --help 'を試してください。
mv --help' for more information. mv: missing file argument Try
詳細についてはmv --help 'を試してください。mv:ファイル引数がありませんmv --help' for more information. mv: missing file argument Try
詳細については、mv --help 'を試してください。
置換タスクを再帰的に適用したい場合はどうなりますか?どうしますか
さて、私は自分で答えを見つけました。最もエレガントな解決策ではありませんが(条件に適合しないファイルの名前も変更しようとします)、機能します。(ところで、私の場合、ファイル名をアンダースコアではなく '%20'に変更する必要がありました)
#!/bin/bash
find . -type d | while read N
do
(
cd "$N"
if test "$?" = "0"
then
for file in *; do mv "$file" ${file// /%20}; done
fi
)
done
すべてのファイルが.txtであると想定して、次のようなことを試してください。
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
tr --help' for more information. mv: missing file argument Try
詳細については、mv --help 'を試してください。
ここに別の解決策があります:
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
変数を引用します。
for file in *; do echo mv "'$file'" "${file// /_}"; done
実際の名前変更を行うには、「エコー」を削除します。
\'1130 lake micigan view.jpg\'': No such file or directory mv: cannot stat
\ '1130_1_bedroom_floor_plan.jpg \' ':no stat \'1130_BedPicture_8.jpg\'': No such file or directory mv: cannot stat
or file' \ '1130_diningroom_table.jpg \' ':No such file or directory
で文字列(ここではスペース文字)を別の文字列に置き換える最も簡単な方法Linux
は、を使用することsed
です。あなたは次のようにそれを行うことができます
sed -i 's/\s/_/g' *
お役に立てれば。
あなたの答えはファイル名のスペースをアンダースコアに置き換えるにあると思います。
.py
拡張子を使用してすべてのファイルの名前を変更するには、
find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
出力例、
$ find . -iname "*.py" -type f
./Sample File.py
./Sample/Sample File.py
$ find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
$ find . -iname "*.py" -type f
./Sample/Sample_File.py
./Sample_File.py
1 - foo.jpg
と、私のフォルダにはすでにその名前が含ま1.jpg
れています。