質問

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

役に立ちましたか?

解決

これでうまくいくはずです:

for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done

他のヒント

Perlスタイルの正規表現を使用するコマンド 'rename'を使用することを好みます:

rename "s/ /_/g" *

-nフラグを使用してドライランを実行できます。

rename -n "s/ /_/g" *

sh ...を使用...

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

変数の引用:

for file in *; do echo mv "'$file'" "${file// /_}"; done

" echo"を削除します実際の名前変更を行います。

すべてのファイルが.txtであると仮定して、このようなことを試してください:

for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done

Linux で文字列(ケースの場合はスペース文字)を別の文字列に置き換える最も簡単な方法は、 sed を使用することです。次のようにできます

sed -i 's/\s/_/g' *

これがお役に立てば幸いです。

別のソリューションを次に示します。

ls | awk '{printf("\"%s\"\n", <*>)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
  1. awkを使用して、ファイル名を引用符で囲みます
  2. sedを使用してスペースをアンダースコアに置き換えます。引用符付きの元の名前を出力します(awkから)。置換された名前
  3. xargsは一度に2行を受け取り、それをmvに渡します

拡張子が .py のすべてのファイルの名前を変更するには、 <コード> 見つける。 -iname&quot; *。py&quot;タイプf | xargs -I%rename&quot; s / / _ / g&quot; &quot;%&quot;

サンプル出力、

$ 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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top