フォルダー内に多数のファイルがあり、すべてのファイル名のすべてのスペース文字をアンダースコアに置き換えたいです。どうすればこれを達成できますか?
これはそれを行う必要があります:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
Perlスタイルの正規表現を使用するコマンド 'rename'を使用することを好みます。
rename "s/ /_/g" *
-nフラグを使用してドライランを実行できます。
rename -n "s/ /_/g" *
使用して...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
トリガーを引く前にこれを試してみたい場合は、mv
をecho mv
。
置換タスク再帰的を適用する場合はどうなりますか?どうしますか?
さて、私は自分で答えを見つけました。最もエレガントなソリューションはありません(条件を満たさないファイルも名前を変更しようとします)が、機能します。 (ところで、私の場合、アンダースコアではなく '%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
Bashを使用する場合:
for file in *; do mv "$file" ${file// /_}; done
すべてのファイルが.txtであると仮定して、次のようなものを試してください。
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
文字列(この場合はスペース文字)をLinux
の別の文字列で置き換える最も簡単な方法は、sed
を使用することです。次のようにできます
sed -i 's/\s/_/g' *
お役に立てれば。
変数を引用してください:
for file in *; do echo mv "'$file'" "${file// /_}"; done
「エコー」を削除して、実際の名前変更を行います。
別のソリューションを次に示します。
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
あなたの答えはファイル名のスペースをアンダースコアに置き換えるにあると思います。
.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