フォルダー内に多数のファイルがあり、すべてのファイル名のすべてのスペース文字をアンダースコアに置き換えたいと考えています。どうすればこれを達成できますか?
88395 次
11 に答える
199
これはそれを行う必要があります:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
于 2009-11-27T05:42:03.087 に答える
86
Perl スタイルの正規表現を使用するコマンド「rename」を使用することを好みます。
rename "s/ /_/g" *
-n フラグを使用して予行演習を実行できます。
rename -n "s/ /_/g" *
于 2009-11-27T05:45:07.520 に答える
17
使用...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
トリガーを引く前にこれを試してみたい場合は、 に変更mv
してecho mv
ください。
于 2009-11-27T05:39:49.080 に答える
5
バッシュを使用する場合:
for file in *; do mv "$file" ${file// /_}; done
于 2009-11-27T05:24:38.563 に答える
4
置換タスクを再帰的に適用したい場合はどうしますか? どうやってそれをしますか?
まあ、私は自分で答えを見つけました。最も洗練されたソリューションではありませんが (条件に準拠していないファイルの名前を変更しようとします)、機能します。(ところで、私の場合、ファイルの名前をアンダースコアではなく「%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
于 2010-04-02T20:33:16.933 に答える
3
別の解決策は次のとおりです。
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
- awk を使用して、ファイル名を引用符で囲みます
- sed を使用してスペースをアンダースコアに置き換えます。元の名前を引用符付きで出力します(awkから); 次に、置換された名前
- xargs は一度に 2 行を取り、それを mv に渡します
于 2018-11-09T13:51:26.900 に答える
2
すべてのファイルが .txt であると仮定して、次のようなことを試してください。
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
于 2009-11-27T05:21:03.717 に答える
1
変数を引用してください:
for file in *; do echo mv "'$file'" "${file// /_}"; done
実際の名前変更を行うには、「エコー」を削除します。
于 2009-11-27T05:42:49.383 に答える
0
文字列 (この場合はスペース文字) を別の文字列に置き換える最も簡単な方法Linux
は、sed
. 次のように行うことができます
sed -i 's/\s/_/g' *
お役に立てれば。
于 2016-12-09T13:03:53.217 に答える