112

フォルダー内に多数のファイルがあり、すべてのファイル名のすべてのスペース文字をアンダースコアに置き換えたいと考えています。どうすればこれを達成できますか?

4

11 に答える 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
  1. awk を使用して、ファイル名を引用符で囲みます
  2. sed を使用してスペースをアンダースコアに置き換えます。元の名前を引用符付きで出力します(awkから); 次に、置換された名前
  3. 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 に答える